Trong bài viết này, bạn sẽ tìm hiểu cách đọc, phân tích cú pháp và ghi các tệp JSON bằng Python. Tôi sẽ nói về cách xử lý tốt nhất các tệp JSON đơn giản cũng như các tệp JSON lồng nhau. Ngoài ra, tôi sẽ thảo luận về cách truy cập các giá trị cụ thể trong dữ liệu
JSON là gì?JSON [Java Script Object Notation] là một định dạng tệp phổ biến để lưu trữ và truyền dữ liệu trong các ứng dụng web. Rất có khả năng bạn sẽ gặp các tệp JSON nếu bạn làm việc với dữ liệu, vì vậy bạn chắc chắn muốn tìm hiểu cách đọc và ghi vào JSON
Dưới đây là một ví dụ về cấu trúc của tệp JSON có thể trông như thế nào
Hình ảnh của tác giả
Cấu trúc JSON trông rất giống với từ điển Python. Lưu ý rằng JSON ở định dạng của
import pandas as pddf = pd.read_json[‘superheroes.json’]2 cặp, trong đó khóa là một chuỗi và giá trị có thể là một chuỗi, số, boolean, mảng, đối tượng hoặc null. Để giúp bạn hình dung điều đó, tôi đã đánh dấu tất cả các phím bằng màu xanh lam và tất cả các giá trị bằng màu cam trong hình ảnh bên dưới. Lưu ý rằng mỗi khóa/giá trị cũng được phân tách bằng dấu phẩy. Hãy tiếp tục và kiểm tra hình ảnh bên dưới để làm quen với định dạng. Chúng tôi sẽ thảo luận về cấu trúc lồng nhau của khóa 'thành viên' sau trong bài viết này
Hình ảnh của tác giảNhập JSON vào Python
Python tiện lợi đã tích hợp sẵn các chức năng để giúp đọc các tệp JSON. Dưới đây là một số ví dụ về cách phân tích các tệp JSON thành một đối tượng Python
Trước khi chúng tôi bắt đầu, nếu bạn muốn làm theo các ví dụ
- Đi đến liên kết này
- Nhấp chuột phải vào trang và chọn Lưu dưới dạng
- Lưu tệp dưới dạng tệp JSON có tên là siêu anh hùng
ví dụ 1. Đang tải JSON vào từ điển Python
Bắt đầu bằng cách nhập thư viện
import pandas as pddf = pd.read_json[‘superheroes.json’]3. Chúng tôi sử dụng hàm
import pandas as pddf = pd.read_json[‘superheroes.json’]4 để đọc tệp JSON và sau đó là phương thức
import pandas as pddf = pd.read_json[‘superheroes.json’]5 để phân tích chuỗi JSON thành một từ điển Python có tên superHeroSquad. Đó là nó. Bây giờ bạn đã có một từ điển Python từ tệp JSON của mình. Khá đơn giản
import json
with open['superheroes.json'] as f:
superHeroSquad = json.load[f]type[superHeroSquad]
# Output: dictsuperHeroSquad.keys[]
# Output: dict_keys[['squadName', 'homeTown', 'formed', 'secretBase', 'active', 'members']]
Một điều lưu ý là thư viện
import pandas as pddf = pd.read_json[‘superheroes.json’]3 có cả
import pandas as pddf = pd.read_json[‘superheroes.json’]7 và
import pandas as pddf = pd.read_json[‘superheroes.json’]8. Cả hai đều làm giống nhau, nhưng
import pandas as pddf = pd.read_json[‘superheroes.json’]8 là tạo đối tượng Python từ chuỗi JSON trong khi
import pandas as pddf = pd.read_json[‘superheroes.json’]7 là tạo đối tượng Python từ tệp JSON. Bạn có thể nghĩ thêm 's' trong
import pandas as pddf = pd.read_json[‘superheroes.json’]8 là "tải cho chuỗi"
ví dụ 2. Đang tải JSON vào Pandas Dataframe
Sử dụng phương pháp
df1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
2 nếu bạn muốn chuyển đổi tệp JSON thành Khung dữ liệu Pandasimport pandas as pddf = pd.read_json[‘superheroes.json’]
Hình ảnh của tác giả
Lưu ý rằng bạn không bị giới hạn đọc các tệp JSON từ máy tính của mình. Bạn cũng có thể chuyển đường dẫn URL đến chức năng. Điều này sẽ giúp bạn tiết kiệm bước phải tải xuống tệp JSON
df1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
ví dụ 3. Đang tải JSON lồng nhau vào Pandas
Bạn có thể sẽ gặp các tệp JSON được lồng vào nhau. Điều đó thường gây khó khăn khi làm việc với Pandas. JSON lồng nhau tương tự như ý tưởng về từ điển lồng nhau trong python, tức là từ điển trong từ điển
Hãy kiểm tra lại cấu trúc dữ liệu siêu anh hùng. Lưu ý rằng trong khóa 'thành viên', có nhiều bộ cặp khóa/giá trị liên quan đến khóa 'thành viên'. Sự thụt đầu dòng là một chỉ số hữu ích minh họa cấu trúc lồng nhau
Hình ảnh của tác giả
Nhớ lại từ trước đó khi chúng tôi tải tệp JSON của mình vào khung dữ liệu Pandas, cột 'thành viên' của chúng tôi trông như thế này. Mỗi hàng chứa một từ điển
Hình ảnh của tác giả
Cột 'thành viên' sẽ thuận tiện hơn nhiều khi làm việc với Pandas nếu mỗi khóa thực sự là các cột riêng lẻ. Tôi sẽ thảo luận về hai phương pháp mà chúng ta có thể phân tích dữ liệu để mỗi khóa được chia thành một cột
Phương pháp 1
Chúng ta có thể sử dụng phương thức áp dụng trên cột 'thành viên' như thế này
df[‘members’].apply[pd.Series]
Bốn khóa trong 'thành viên' hiện được chia thành các cột riêng biệt như hình bên dưới. Điều này dễ dàng hơn nhiều để thực hiện thao tác và chuyển đổi dữ liệu
Hình ảnh của tác giả
Để kết hợp các cột mới với khung dữ liệu ban đầu, chúng ta có thể sử dụng ____11_______3
df = pd.concat[[df[‘members’].apply[pd.Series], df.drop[‘members’, axis = 1]], axis = 1]
Phương pháp 2
Pandas cũng có chức năng tích hợp sẵn
df1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
4 sẽ cho phép bạn làm phẳng các JSON lồng nhau. Đây là một phương pháp sạch hơn để phân tích cú pháp JSON lồng nhaupd.json_normalize[superHeroSquad, record_path = [‘members’], meta = [‘squadName’, ‘homeTown’, ‘formed’, ‘secretBase’, ‘active’]]
- Chúng tôi vượt qua từ điển superHeroSquad của chúng tôi
df1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
5 chứa cột mà chúng tôi muốn phân tích cú phápdf1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
6 là danh sách các cột chúng tôi muốn giữ cho khung dữ liệu
Hình ảnh của tác giả
- Một lưu ý cuối cùng. bạn cũng có thể thêm tham số
df1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
7 nếu bạn muốn thêm một quy ước đặt tên cụ thể vào dữ liệu được phân tích cú pháp
pd.json_normalize[superHeroSquad, record_path = ['members'], meta = ['squadName', 'homeTown', 'formed', 'secretBase', 'active'], meta_prefix = 'members_']
Hình ảnh của tác giảTruy cập dữ liệu
Chúng tôi có thể truy cập dữ liệu ở bất kỳ đâu trong tệp JSON của mình bằng cách xâu chuỗi các tên khóa và/hoặc chỉ số lại với nhau. Ví dụ: giả sử chúng ta muốn truy cập danh tính bí mật của siêu anh hùng thứ hai, Madame Uppercut. Lưu ý vị trí của giá trị cụ thể đó được đánh dấu bằng màu tím bên dưới
Hình ảnh của tác giả
Để truy cập giá trị đó, chúng ta có thể sử dụng đoạn mã sau
superHeroSquad[‘members’][1][‘secretIdentity’]
Bắt đầu từ trên cùng của hệ thống phân cấp và đi xuống, khóa đầu tiên mà chúng tôi cần là 'thành viên' vì đó là nút cha chứa giá trị của chúng tôi
Hình ảnh của tác giả
Bên trong phím 'thành viên', chúng tôi đang tìm kiếm Madame Uppercut, siêu anh hùng thứ hai trong danh sách. Hãy nhớ rằng chỉ mục cho các mục đầu tiên luôn bắt đầu từ 0, vì vậy chúng tôi muốn sử dụng 1 để truy cập siêu anh hùng thứ hai
Cuối cùng, chúng tôi quan tâm đến khóa 'secretIdentity'
Kết hợp tất cả những thứ đó lại với nhau sẽ cho chúng ta dòng mã bên dưới trả về giá trị “Jane Wilson”
superHeroSquad[‘members’][1][‘secretIdentity’]
Bạn có thể nhận thấy rằng tôi đã đánh dấu hai giá trị bằng màu xanh lam trong đoạn mã JSON ở trên. Hãy tiếp tục và thử truy cập các giá trị đó dưới dạng các bài tập riêng lẻ. Hãy chia sẻ mã của bạn trong phần bình luận bên dưới
Xuất từ Python sang JSONHãy chỉnh sửa nhanh danh tính bí mật còn thiếu của siêu anh hùng cuối cùng của chúng ta, Eternal Flame, từ “Unknown” thành “Will Smith” và sau đó xuất từ điển superHeroSquad của chúng ta trở lại tệp JSON. Chúng tôi sử dụng phương pháp
df1 = pd.read_json[‘//mdn.github.io/learning-area/javascript/oojs/json/superheroes.json']
8 để ghi vào tệp#update secret identity of Eternal Flame
superHeroSquad[‘members’][2][‘secretIdentity’] = 'Will Smith'with open['superheroes.json', 'w'] as file:
json.dump[superHeroSquad, file]
Nếu bạn mở các siêu anh hùng của mình. json, giờ đây nó sẽ có Will Smith là danh tính bí mật của Ngọn lửa vĩnh cửu. Tương tự như
import pandas as pddf = pd.read_json[‘superheroes.json’]7 và
import pandas as pddf = pd.read_json[‘superheroes.json’]8 đã đề cập trước đó, thư viện
import pandas as pddf = pd.read_json[‘superheroes.json’]3 cũng có
df[‘members’].apply[pd.Series]
2 và df[‘members’].apply[pd.Series]
3. Một để lưu trữ dưới dạng tệp JSON và một để lưu trữ dưới dạng chuỗi JSON tương ứngNgoài ra, nếu bạn đang làm việc với Pandas Dataframe và muốn xuất sang JSON, bạn có thể sử dụng phương thức
df[‘members’].apply[pd.Series]
4df[‘members’].apply[pd.Series]
5in đẹp
Bạn có thể nhận thấy rằng tệp JSON trông không đẹp lắm trong tệp đầu ra của bạn. Nó hiển thị dưới dạng một chuỗi như bên dưới
Hình ảnh của tác giả
Để làm cho nó trông đẹp hơn, bạn có thể sử dụng tham số
df[‘members’].apply[pd.Series]
6 trong phương thức df[‘members’].apply[pd.Series]
7 của mìnhimport pandas as pddf = pd.read_json[‘superheroes.json’]0
Đầu ra sẽ giống như hình ảnh bên dưới, dễ đọc hơn nhiều
Hình ảnh của tác giả
Sắp xếp
Nếu được yêu cầu, bạn cũng có thể chuyển tham số
df[‘members’].apply[pd.Series]
8, được đặt thành df[‘members’].apply[pd.Series]
9 để sắp xếp khóa của bạn. Lưu ý rằng tất cả các khóa bao gồm cả các khóa lồng nhau đều được sắp xếpimport pandas as pddf = pd.read_json[‘superheroes.json’]1
Hình ảnh của tác giảTóm tắt
- Cấu trúc dữ liệu JSON ở định dạng của các cặp
import pandas as pddf = pd.read_json[‘superheroes.json’]
2, trong đó khóa là một chuỗi và giá trị có thể là một chuỗi, số, boolean, mảng, đối tượng hoặc null - Python đã tích hợp sẵn các hàm dễ dàng nhập các tệp JSON dưới dạng từ điển Python hoặc khung dữ liệu Pandas
- Sử dụng
df = pd.concat[[df[‘members’].apply[pd.Series], df.drop[‘members’, axis = 1]], axis = 1]
1 để tải các JSON đơn giản vàdf = pd.concat[[df[‘members’].apply[pd.Series], df.drop[‘members’, axis = 1]], axis = 1]
2 để tải các JSON lồng nhau - Bạn có thể dễ dàng truy cập các giá trị trong tệp JSON của mình bằng cách xâu chuỗi các tên khóa và/hoặc chỉ số lại với nhau
- Các đối tượng Python có thể được xuất trở lại JSON với khả năng in và sắp xếp đẹp mắt
Cảm ơn bạn đã đọc. Hãy cho tôi biết trong phần nhận xét nếu bạn có các mẹo khác để làm việc với JSON trong Python
Làm cách nào để phân tích cú pháp dữ liệu JSON trong Python?
Nếu bạn có một chuỗi JSON, bạn có thể phân tích cú pháp chuỗi đó bằng cách sử dụng json. phương thức load[] . Kết quả sẽ là một từ điển Python.Cách tốt nhất để làm việc với JSON trong Python là gì?
Bắt đầu bằng cách nhập thư viện json. Chúng ta sử dụng hàm open để đọc tệp JSON và sau đó là phương thức json. load[] để phân tích cú pháp chuỗi JSON thành một từ điển Python có tên superHeroSquad . Đó là nó.Python có thư viện JSON không?
Python đi kèm với gói tích hợp có tên là json để mã hóa và giải mã dữ liệu JSON.Làm cách nào để phân tích phản hồi JSON trong Python?
Để phân tích chuỗi dữ liệu JSON thành đối tượng Python, hãy sử dụng json. loads[] của gói dựng sẵn có tên json . json. phương thức loading[] phân tích cú pháp chuỗi dữ liệu JSON được cung cấp và trả về một từ điển Python chứa tất cả dữ liệu từ JSON.