Cách chuyển đổi JSON sang CSV bằng Python
24/05/2023 01:33
Tùy thuộc vào dự án bạn đang thực hiện, dữ liệu của bạn có thể có nhiều định dạng. Vì vậy, điều quan trọng là phải thoải mái xử lý dữ liệu ở nhiều định dạng khác nhau. JSON và CSV là hai định dạng rất phổ biến. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách chuyển đổi định dạng JSON thành CSV trong Python.
Định dạng tệp JSON
JSON (KÝ HIỆU ĐỐI TƯỢNG JAVASCRIPT) là một định dạng tệp nhẹ và dễ hiểu được sử dụng để lưu trữ và truyền dữ liệu. Con người có thể đọc được – nếu bạn mở tệp trong trình soạn thảo văn bản, bạn sẽ có thể hiểu và diễn giải cấu trúc của tệp cũng như dữ liệu bên trong tệp.
Nếu bạn biết từ điển Python, cấu trúc của JSON có thể trông quen thuộc. Nội dung của tệp JSON trông giống như sau:
{ "first_name" : "Arna" , "last_name" : "Gunnarsson" , "age" : 38, "email" : "arna.gunnarsson@email.com" , "hobbies" :[ "tennis" , "cooking" ], "married" : false } |
Các tệp JSON chứa các cặp tên:giá trị. Có một số loại dữ liệu được phép, chẳng hạn như chuỗi, số, mảng (danh sách được sắp xếp bên trong dấu ngoặc vuông) và Booleans (đúng, sai). Các đối tượng lồng nhau (tên: cặp giá trị) và giá trị trống (null) cũng được cho phép.
Định dạng tệp CSV
CÁC TỆP CSV (GIÁ TRỊ ĐƯỢC PHÂN TÁCH BẰNG DẤU PHẨY) cũng là một cách lưu trữ và truyền dữ liệu rất phổ biến. Định dạng tương tự như bảng tính Excel; các phiên bản dữ liệu là các hàng trong tệp và các giá trị được phân tách bằng dấu phẩy. Các tệp cũng có thể được xem trong trình soạn thảo văn bản và trông giống như sau:
first_name,last_name,age,email,hobbies,married Arna,Gunnarsson,38,arna.gunnarsson@email.com, "tennis,cooking" , false |
Có ít tiêu chuẩn hóa hơn với các tệp CSV. Một số triển khai cho phép hoặc yêu cầu dấu ngoặc kép xung quanh các trường. Có dấu phẩy trong dữ liệu của bạn yêu cầu trích dẫn xung quanh mục nhập. Một số tệp thậm chí có thể có dấu phân cách khác (chẳng hạn như tab, dấu chấm phẩy hoặc khoảng trắng) nhưng vẫn được cung cấp phần .csv
xử lý tệp.
Chuyển đổi từ JSON sang CSV
Có thể có trường hợp bạn muốn chuyển đổi từ JSON sang CSV. Có lẽ bạn đang thực hiện một dự án thu thập dữ liệu từ nhiều nguồn khác nhau và mỗi nguồn có một định dạng khác nhau. Hoặc có thể bạn chỉ có dữ liệu ở dạng JSON, nhưng tập lệnh mà đồng nghiệp của bạn đưa cho bạn lại yêu cầu dữ liệu ở định dạng CSV. Trong trường hợp này, bạn sẽ phải chuyển đổi từ định dạng này sang định dạng khác.
Dưới đây là một tệp JSON mẫu mà chúng ta sẽ làm việc. Sao chép dữ liệu sau vào tệp văn bản và lưu dưới dạng tệp data.json
. Chúng tôi sẽ chỉ cho bạn hai phương pháp để chuyển từ tệp JSON sang cùng một dữ liệu ở định dạng CSV. Đây là tệp JSON chúng tôi sẽ sử dụng:
[ { "first_name" : "Arna" , "last_name" : "Gunnarsson" , "age" :38, "email" : "arna.gunnarsson@email.com" }, { "first_name" : "Inga" , "last_name" : "Hagen" , "age" :32, "email" : "ihgn_91@webmail.dk" } ] |
Mô- đun json và csv
MÔ-ĐUN JSON của Python có thể được sử dụng để đọc và ghi dữ liệu JSON. Các chức năng chính của nó là load()
và loads()
để tải một đối tượng tệp hoặc một chuỗi và dump()
để dumps()
ghi vào tệp JSON.
Chúng tôi sẽ bắt đầu bằng cách đọc dữ liệu JSON của mình bằng cách sử dụng open()
:
>>> import json >>> with open ( 'data.json' ) as f: ... json_data = json. load (f) |
Đối json_data
tượng là một danh sách các từ điển; mỗi từ điển tương ứng với một hàng chúng tôi sẽ ghi vào tệp CSV. Để làm điều này, chúng ta sẽ tận dụng MÔ-ĐUN CSV của Python :
>>> import csv >>> headers = json_data[0].keys() >>> with open ( 'data1.csv' , 'w' , newline= '\n' ) as f: ... writer = csv.DictWriter(f, fieldnames=headers) ... writer.writeheader() ... writer.writerows(json_data) |
Ở đây, trước tiên chúng tôi trích xuất các tiêu đề làm khóa của từ điển đầu tiên trong danh sách. Chỉ cần lưu ý rằng chúng tôi giả định rằng tất cả các từ điển trong danh sách đều có cùng khóa. Nó có thể hữu ích để kiểm tra rõ ràng điều này. Hãy thử tự xây dựng chức năng này.
Tiếp theo, chúng tôi mở một đối tượng tệp có tên data1.csv
và ký tự xuống dòng (được định nghĩa là '\n'
) để chúng tôi có thể ghi dữ liệu vào tệp này. Trong dòng tiếp theo, chúng tôi tạo một DictWriter
đối tượng, ánh xạ từ điển vào các hàng đầu ra. Cuối cùng, chúng tôi viết dữ liệu tiêu đề của mình, theo sau là mỗi hàng bằng hàm writeheader()
và writerows()
.