Thư viện Python tốt nhất để phân tích cú pháp JSON

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ụ

  1. Đi đến liên kết này
  2. Nhấp chuột phải vào trang và chọn Lưu dưới dạng
  3. 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: dict
superHeroSquad.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(‘https://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 Pandas

import 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(‘https://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(‘https://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 nhau

pd.json_normalize(superHeroSquad, record_path = [‘members’], meta = [‘squadName’, ‘homeTown’, ‘formed’, ‘secretBase’, ‘active’])

Hình ảnh của tác giả
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'

Hình ảnh của tác giả

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 JSON

Hã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(‘https://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 ứng

Ngoà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)
4

df[‘members’].apply(pd.Series)
5

in đẹ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ình

import 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ếp

import 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.