Site icon Tri thức đời sống

Chuyển đổi PHP CSV sang JSON – PHP

upload and convert csv to json large

Định dạng JSON là định dạng được sử dụng rộng rãi khi làm việc với phát triển API. Hầu hết các phản hồi API hiện có ở định dạng JSON.

Chuyển đổi nội dung CSV sang định dạng JSON rất đơn giản trong PHP. Trong bài viết này, chúng ta sẽ thấy các phương pháp khác nhau để đạt được chuyển đổi này.

ví dụ nhanh

<?php 
$csvFileContent= file_get_contents("animals.csv");
// Converts the CSV file content into line array 
$csvLineArray = explode("\n", $csvFileContent);
// Forms row results in an array format
$result = array_map("str_getcsv", $csvLineArray);
$jsonObject = json_encode($result);
print_r($jsonObject);
?>

Ví dụ nhanh ở trên trong PHP chuyển đổi nội dung tệp CSV thành JSON với một vài dòng mã.

  1. Đầu tiên, nó đọc nội dung tệp .csv bằng hàm PHP file_get_contents().
  2. Nó làm nổ hàng CSV theo trình tự thoát dòng mới (\n).
  3. Sau đó, nó lặp lại mảng dòng và đọc dữ liệu dòng của hàng CSV.
  4. Cuối cùng, mảng hàng CSV kết quả được chuyển đổi thành JSON bằng cách sử dụng hàm json_encode().

Ở bước 3, quá trình lặp lại diễn ra với một dòng mã. Dòng này ánh xạ mảng để gọi PHP str_getcsv để phân tích cú pháp và chuyển đổi các dòng CSV thành một mảng.

Khi chúng tôi thấy các phương pháp đọc tệp CSV, chúng tôi đã tạo một ví dụ bằng cách sử dụng str_getcsv chức năng.

Tệp đầu vào bên dưới được lưu và sử dụng cho ví dụ PHP này.

Nhập CSV

Id,Name,Type,Role
1,Lion,Wild,"Lazy Boss"
2,Tiger,Wild,CEO
3,Jaguar,Wild,Developer

Đầu ra JSON

Ví dụ nhanh về PHP này hiển thị đầu ra JSON bên dưới trên trình duyệt.

[["Id","Name","Type","Role"],["1","Lion","Wild","Lazy Boss"],["2","Tiger","Wild","CEO"],["3","Jaguar","Wild","Developer"]]

Trong các phần tiếp theo, chúng ta sẽ xem thêm hai ví dụ về chuyển đổi tệp CSV thành JSON.

  1. Phương pháp 2: Chuyển đổi CSV (chứa tiêu đề) thành JSON (liên kết cột=>cặp giá trị)
  2. Phương pháp 3: Tải lên tệp CSV và chuyển đổi nó thành JSON

tải lên và chuyển đổi csv sang json

Phương pháp 2: Chuyển đổi CSV (chứa tiêu đề) thành JSON (liên kết cột=>cặp giá trị)

Ví dụ này sử dụng chuỗi CSV làm đầu vào thay vì tệp.

Nó tạo mảng cột tiêu đề bằng cách lấy hàng đầu tiên của tệp CSV.

Sau đó, mã lặp lại các hàng CSV từ hàng thứ hai trở đi. Trên mỗi lần lặp, nó liên kết cột tiêu đề và cột dữ liệu được lặp lại.

Vòng lặp này chuẩn bị một mảng kết hợp chứa dữ liệu CSV.

Ở bước cuối cùng, hàm json_encode() chuyển đổi mảng kết hợp và ghi nó vào tệp JSON đầu ra.

<?php
$csvString = "Id,Name,Type,Role
1,Lion,Wild,Boss
2,Tiger,Wild,CEO
3,Jaguar,Wild,Developer";

$lineContent = array_map("str_getcsv", explode("\n", $csvString));

$headers = $lineContent[0];
$jsonArray = array();
$rowCount = count($lineContent);
for ($i=1;$i<$rowCount;$i++) {
    foreach ($lineContent[$i] as $key => $column) {
        $jsonArray[$i][$headers[$key]] = $column;
    }
}

header('Content-type: application/json; charset=UTF-8');
$fp = fopen('animals.json', 'w');
fwrite($fp, json_encode($jsonArray, JSON_PRETTY_PRINT));
fclose($fp);
?>

Đầu ra – Tệp Animal.json

Đây là đầu ra được ghi vào tệp animal.json thông qua chương trình PHP này.

{
    "1": {
        "Id": "1",
        "Name": "Lion",
        "Type": "Wild",
        "Role": "Boss"
    },
    "2": {
        "Id": "2",
        "Name": "Tiger",
        "Type": "Wild",
        "Role": "CEO"
    },
    "3": {
        "Id": "3",
        "Name": "Jaguar",
        "Type": "Wild",
        "Role": "Developer"
    }
}

Phương pháp 3: Tải lên tệp CSV và chuyển đổi nó thành JSON

Thay vì sử dụng đầu vào CSV cố định được gán cho một chương trình, mã này cho phép người dùng chọn tệp CSV.

Mã này hiển thị biểu mẫu HTML có tệp đầu vào để tải tệp CSV đầu vào lên.

Sau khi được tải lên, tập lệnh PHP sẽ đọc nội dung tệp CSV, chuẩn bị mảng và tạo đầu ra JSON.

Trong hướng dẫn trước, chúng ta đã biết cách chuyển đổi CSV thành mảng PHP.

upload-and-convert-csv-to-json.php

<?php
if (isset($_POST["convert"])) {
    if ($_FILES['csv_file_input']['name']) {
        if ($_FILES['csv_file_input']["type"] == 'text/csv') {
            $jsonOutput = array();
            $csvFileContent = file_get_contents($_FILES['csv_file_input']['tmp_name']);
            $result = array_map("str_getcsv", explode("\n", $csvFileContent));
            $header = $result[0];
            $recordCount = count($result);
            for ($i = 1; $i < $recordCount; $i++) {
                // Associates the data with the string index in the header array
                $data = array_combine($header, $result[$i]);
                $jsonOutput[$i] = $data;
            }
            header('Content-disposition: attachment; filename=output.json');
            header('Content-type: application/json');
            echo json_encode($jsonOutput);
            exit();
        } else {
            $error="Invalid CSV uploaded";
        }
    } else {
        $error="Invalid CSV uploaded";
    }
}
?>
<!DOCTYPE html>
<html>

<head>
    <title>Convert CSV to JSON</title>
    <style>
        body {
            font-family: arial;
        }

        input[type="file"] {
            padding: 5px 10px;
            margin: 30px 0px;
            border: #666 1px solid;
            border-radius: 3px;
        }

        input[type="submit"] {
            padding: 8px 20px;
            border: #232323 1px solid;
            border-radius: 3px;
            background: #232323;
            color: #FFF;
        }

        .validation-message {
            color: #e20900;
        }
    </style>
</head>
<body>
    <form name="frmUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="csv_file_input" accept=".csv" /> 
        <input type="submit" name="convert" value="Convert">
        <?php
        if (!empty($error)) 
        { 
        ?>
            <span class="validation-message"><?php echo $error; ?></span>
        <?php 
        } 
        ?>
    </form>
</body>
</html>

Đầu ra:

Chương trình này ghi JSON đầu ra vào một tệp và tự động tải xuống trình duyệt.

Lưu ý: Cả hai phương pháp 2 và 3 đều yêu cầu đầu vào CSV có hàng cột tiêu đề để có kết quả tốt.

Tải xuống

↑ Quay lại Đầu trang


Xem thêm tin mới và bổ ích tại:

Kiến thức gia đình

Tri thức đời sống

– Kênh youtube Kiến thức gia đình
Exit mobile version