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 Show
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 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 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ụ
ví dụ 1. Đang tải JSON vào từ điển PythonBắ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 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 DataframeSử 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 Pandasimport pandas as pddf = pd.read_json(‘superheroes.json’) 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 PandasBạ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 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 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 Để 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 nhaupd.json_normalize(superHeroSquad, record_path = [‘members’], meta = [‘squadName’, ‘homeTown’, ‘formed’, ‘secretBase’, ‘active’])
pd.json_normalize(superHeroSquad, record_path = ['members'], meta = ['squadName', 'homeTown', 'formed', 'secretBase', 'active'], meta_prefix = 'members_') 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 Để 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 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(‘https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json') 8 để ghi vào tệp#update secret identity of Eternal Flame 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 đẹpBạ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 Để 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 Sắp xếpNế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
|