Phân tích cú pháp Python JSON: Hướng dẫn đơn giản

Phân tích cú pháp Python JSON: Hướng dẫn đơn giản

JSON (viết tắt của 'JavaScript Object Notation') là một định dạng dựa trên văn bản tạo điều kiện cho việc trao đổi dữ liệu giữa các ứng dụng đa dạng. Ví dụ, một ứng dụng được viết bằng C ++ chạy trên Windows có thể dễ dàng trao đổi dữ liệu JSON với một ứng dụng được viết bằng python và chạy trên Linux. Tính đơn giản và linh hoạt của nó đã dẫn đến việc sử dụng rộng rãi trong những năm gần đây, đặc biệt là ưu tiên cho các định dạng dựa trên XML trước đó.





Có các thư viện và bộ công cụ có sẵn để phân tích cú pháp và tạo JSON từ hầu hết mọi ngôn ngữ và môi trường. Bài viết này tập trung vào các phương pháp và các vấn đề phát sinh khi xử lý JSON bằng python.





Một số mẫu JSON

Thực thể JSON phổ biến nhất mà bạn sẽ gặp là một sự vật : một tập hợp các ánh xạ khóa-giá trị ở định dạng được hiển thị bên dưới.





err_connection_refused chrome

person.json:

{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}

Đây là cách bạn có thể biểu diễn một mảng đối tượng. Trong biểu diễn này, mỗi mục của mảng là một đối tượng. Sau đây là mẫu lương của các cầu thủ bóng chày.



lương.json:

[ {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'barkele01',
'salary' : 870000
}, {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'bedrost01',
'salary' : 550000
} ]

Tất nhiên, bạn cũng có thể biểu diễn một mảng vô hướng. Nó trông như thế này:





[
'hello',
'world',
35
]

Phân tích cú pháp JSON bằng Python

Python cung cấp json mô-đun này có thể được sử dụng để phân tích cú pháp JSON, cũng như tạo JSON từ các đối tượng và danh sách python.

Đoạn mã sau cho biết cách mở tệp JSON và tải dữ liệu vào một biến.





import json
with open('sample.json', 'r') as fp:
obj = json.load(fp)

Khi bạn có một chuỗi chứa dữ liệu JSON, bạn có thể chuyển đổi nó thành một đối tượng python (hoặc danh sách) như sau:

cách ghép nối điều khiển từ xa lửa amazon
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Để phân tích cú pháp một URL JSON, bạn có thể tạo một đối tượng URL bằng cách sử dụng urllib2 Và sử dụng json.load () như trước.

import urllib2, json
url = urllib2.urlopen('http://site.com/sample.json')
obj = json.load(url)

Xử lý lỗi

Khi JSON có lỗi, bạn sẽ nhận được ValueError . Bạn có thể xử lý và thực hiện hành động sửa chữa nếu được yêu cầu.

try:
obj = json.loads('''{
'firstName': 'Alice',
'lastName: 'Hall',
'age': 35
}''')
except ValueError:
print('error loading JSON')

Phân tích cú pháp JSON từ dòng lệnh

Đôi khi, rất hữu ích khi phân tích cú pháp JSON bằng cách sử dụng dòng lệnh python, có lẽ để kiểm tra lỗi hoặc để có được đầu ra được thụt lề độc đáo.

cat glossary.json
# prints
{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'GlossDef': {'GlossSeeAlso': ['GML', 'XML'], 'para': 'A meta-markup language, used to create markup languages such as DocBook.'}, 'GlossSee': 'markup', 'Acronym': 'SGML', 'GlossTerm': 'Standard Generalized Markup Language', 'Abbrev': 'ISO 8879:1986', 'SortAs': 'SGML', 'ID': 'SGML'}}, 'title': 'S'}, 'title': 'example glossary'}}

Để có được đầu ra được thụt lề từ tệp JSON ở trên, bạn có thể làm như sau:

python -mjson.tool glossary.json
# prints
{
'glossary': {
'GlossDiv': {
'GlossList': {
'GlossEntry': {
'Abbrev': 'ISO 8879:1986',
'Acronym': 'SGML',
'GlossDef': {
'GlossSeeAlso': [
'GML',
'XML'
],
'para': 'A meta-markup language, used to create markup languages such as DocBook.'
},
'GlossSee': 'markup',
'GlossTerm': 'Standard Generalized Markup Language',
'ID': 'SGML',
'SortAs': 'SGML'
}
},
'title': 'S'
},
'title': 'example glossary'
}
}

Và đây là cách bạn có thể tải đối tượng JSON vào python và chỉ giải nén những gì bạn cần.

python -c 'import json; fp = open('glossary.json', 'r'); obj = json.load(fp); fp.close(); print(obj['glossary']['title']')
# prints
example glossary

Truy cập dữ liệu

Khi bạn đã tải dữ liệu JSON vào một biến python, bạn có thể truy cập dữ liệu như cách bạn làm với bất kỳ lệnh python nào (hoặc danh sách tùy trường hợp). Ví dụ: dữ liệu JSON ở trên có thể được truy cập như sau:

firstName = obj['firstName']
lastName = obj['Hall']
age = obj['age']

Loại dữ liệu

Các kiểu dữ liệu được xác định tự động từ dữ liệu. Lưu ý rằng tuổi được phân tích cú pháp dưới dạng số nguyên.

print(type(obj['firstName']), type(obj['lastName']), type(obj['age']))
# prints

Bảng chuyển đổi sau được sử dụng để chuyển đổi từ JSON sang python.

Phân tích cú pháp JSON bằng lớp tùy chỉnh

Theo mặc định, một đối tượng JSON là phân tích thành một con trăn mệnh lệnh . Đôi khi bạn có thể có nhu cầu tự động tạo một đối tượng thuộc lớp của riêng mình từ dữ liệu JSON. Bạn có thể làm điều đó bằng cách chỉ định một object_hook chức năng xử lý chuyển đổi. Ví dụ sau đây cho thấy làm thế nào.

Đây là một lớp tùy chỉnh đại diện cho một Người .

class Person:
def __init__(self, firstName, lastName, age):
self.firstName = firstName
self.lastName = lastName
self.age = age
def __str__(self):
return '{{'firstName' = '{0}','lastName' = '{1}', 'age' = {2}}}'.format(self.firstName, self.lastName, self.age)

Một thể hiện của lớp này được tạo bằng cách truyền các đối số bắt buộc như sau:

person = Person('Crystal', 'Newell', 27)

Để sử dụng lớp này để tạo các phiên bản khi phân tích cú pháp JSON, bạn cần object_hook hàm được định nghĩa như sau: Hàm nhận một python mệnh lệnh và trả về một đối tượng của lớp đúng.

def obj_creator(d):
return Person(d['firstName'], d['lastName'], d['age'])

Bây giờ bạn có thể sử dụng cái này object_hook khi gọi trình phân tích cú pháp JSON.

with open('sample.json', 'r') as fp:
obj = json.load(fp, object_hook = obj_creator)
print(obj)
# prints
{'firstName' = 'Alice','lastName' = 'Hall', 'age' = 35}

Ví dụ về cách sử dụng JSON

JSON ngày nay rất phổ biến. Nhiều trang web và ứng dụng SaaS (Software As A Service) cung cấp đầu ra JSON có thể được các ứng dụng sử dụng trực tiếp. Một số cái có sẵn công khai bao gồm:

  • StackOverflow / StackExchange. Đây là một URL trả về danh sách các câu hỏi ở định dạng JSON.
  • GitHub cung cấp một api JSON tại https://developer.github.com/v3/.
  • Và đây là API Flickr: https://developer.yahoo.com/flickr/.

Nếu bạn đang tìm kiếm thêm các ví dụ về cách sử dụng tốt, hãy xem hướng dẫn này để xây dựng một bot truyền thông xã hội bằng Python .

tại sao quạt máy tính xách tay của tôi kêu to quá

Bạn có đang sử dụng JSON để sử dụng hoặc cung cấp dịch vụ không? Và bạn có đang sử dụng python trong ngăn xếp công nghệ của mình không? Làm giải thích trong các ý kiến ​​dưới đây.

Đăng lại Đăng lại tiếng riu ríu E-mail Nâng cấp lên Windows 11 có đáng không?

Windows đã được thiết kế lại. Nhưng điều đó có đủ thuyết phục bạn chuyển từ Windows 10 sang Windows 11?

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Lập trình
  • Python
Giới thiệu về tác giả Jay Sridhar(17 bài báo đã xuất bản) Xem thêm từ Jay Sridhar

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký