JSON tìm kiếm bằng Python

Mô-đun json của Python cho phép sử dụng dữ liệu ở định dạng JSON trong các ứng dụng của bạn. Bạn có muốn chuyển đổi một đối tượng Python thành JSON hoặc ngược lại không?

Mô-đun json của Python cung cấp các chức năng để chuyển đổi một đối tượng Python thành JSON [dump[] và dumps[]], quá trình chuyển đổi này được gọi là tuần tự hóa hoặc mã hóa. Mô-đun json cũng cung cấp các chức năng để chuyển đổi dữ liệu JSON thành đối tượng Python [load[] và loading[]], đây được gọi là giải tuần tự hóa hoặc giải mã

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách sử dụng mô-đun json của Python để thực hiện tuần tự hóa và giải tuần tự hóa dữ liệu bằng định dạng JSON

Hãy bắt đầu bằng cách xem xét hai chức năng được cung cấp bởi mô-đun json. bãi [] và tải []

Mục lục

  • Kết xuất JSON trong Python là gì?
  • Tải JSON trong Python là gì?
  • Làm thế nào để bạn đọc một tệp JSON bằng Python?
  • Làm thế nào để bạn viết một tệp JSON bằng Python?
  • Bảng chuyển đổi JSON trong Python
  • Chuyển đổi các giá trị Boolean, Numeric và Null từ JSON sang Python
  • Cách in dữ liệu JSON đẹp
  • Dấu phân cách cho các đối tượng JSON trong Python
  • Sắp xếp các khóa của đối tượng JSON
  • Sử dụng vòng lặp For để in các phần tử trong một mảng JSON
  • Cách lấy JSON từ API bằng Python
  • Phần kết luận

Kết xuất JSON trong Python là gì?

json. Hàm dumps[] chuyển đổi một đối tượng Python thành một chuỗi ở định dạng JSON

Quá trình chuyển đổi một đối tượng Python thành một chuỗi JSON được gọi là tuần tự hóa. Quá trình này còn được gọi là mã hóa

Ví dụ: hãy định nghĩa một từ điển Python

>>> user = {'name': 'John', 'email': 'test@email.com'}
>>> type[user]

Và xem đầu ra chúng ta nhận được khi chuyển nó vào json. hàm bãi []

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 

Hàm kết xuất đã chuyển đổi [tuần tự hóa] từ điển thành chuỗi JSON

Chữ 's' trong tên của hàm kết xuất đề cập đến thực tế là hàm này hoạt động với các chuỗi [trái ngược với hàm kết xuất [] hoạt động trên các tệp]

Tải JSON trong Python là gì?

Quá trình chuyển đổi một chuỗi JSON thành một đối tượng Python được gọi là giải tuần tự hóa. Quá trình này còn được gọi là giải mã

json. hàm loading[] thực hiện giải tuần tự hóa chuỗi JSON thành đối tượng Python

Lấy chuỗi JSON mà chúng tôi đã tạo trong phần trước và chuyển đổi lại thành từ điển

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 

Theo cách tương tự mà chúng ta đã thấy với json. hàm dumps[], hàm json. loading[] tên hàm kết thúc bằng chữ ‘s’

Đó là bởi vì nó áp dụng cho các chuỗi JSON chứ không phải các tệp JSON [vì bạn sẽ sử dụng hàm json. hàm tải []]

Làm thế nào để bạn đọc một tệp JSON bằng Python?

Mô-đun json của Python cung cấp hàm load[] để đọc nội dung của tệp JSON và chuyển đổi nó thành một đối tượng Python

Hành vi giống như hàm loading[] với điểm khác biệt duy nhất là hàm loading[] áp dụng cho chuỗi và load[] cho tệp

Đây là cách bạn có thể đọc dữ liệu JSON từ một tệp. Tôi đã tạo một tệp có tên bài viết. json với nội dung sau

[
  { 
    "userId": 1,
    "postId": 1,
    "title": "How to Convert a JSON Object into a Python Object"
  },
  { 
    "userId": 1,
    "postId": 2,
    "title": "How to Convert a Python Object into a JSON Object"
  }
] 

Giả sử tôi muốn đọc tiêu đề của bài viết đầu tiên

Đầu tiên, hãy chuyển đổi JSON trong tệp thành đối tượng Python bằng load[]. Để mở tệp, chúng tôi sẽ sử dụng trình quản lý bối cảnh mở để tự động đóng tệp khi không cần nữa

>>> import json
>>> with open['posts.json'] as json_file:
..     data = json.load[json_file]
... 
>>> print[data]
[{'userId': 1, 'postId': 1, 'title': 'How to Convert a JSON Object into a Python Object'}, {'userId': 1, 'postId': 2, 'title': 'How to Convert a Python Object into a JSON Object'}]
>>> print[type[data]]
 

Chúng tôi đã chuyển đổi [hoặc giải mã hoặc giải tuần tự hóa] dữ liệu của mình thành một danh sách

Hãy xác nhận rằng các phần tử của danh sách là từ điển

>>> print[type[data[0]]]
 

Điều đó tốt, điều này có nghĩa là để lấy tiêu đề của bài đăng đầu tiên, chúng ta chỉ cần truy cập khóa 'title' của từ điển data[0]

>>> print[data[0]['title']]
How to Convert a JSON Object into a Python Object 

Làm thế nào để bạn viết một tệp JSON bằng Python?

Chúng ta đã biết cách đọc dữ liệu JSON từ một tệp và chuyển đổi nó thành một đối tượng Python

Làm thế nào bạn có thể làm điều ngược lại?

Mô-đun json của Python cung cấp hàm dump[] ghi một đối tượng Python vào một tệp ở định dạng JSON

Hãy bắt đầu từ đối tượng Python được tạo ở phần trước

>>> data = [{'userId': 1, 'postId': 1, 'title': 'How to Convert a JSON Object into a Python Object'}, {'userId': 1, 'postId': 2, 'title': 'How to Convert a Python Object into a JSON Object'}] 

Thay vì chỉ ghi dữ liệu này vào tệp JSON, chúng tôi sẽ sửa đổi dữ liệu trước

Do đó, chúng tôi muốn có một đối tượng JSON trong đó cả hai mục đều chứa một thuộc tính trống mới có tên là “body”

Thêm khóa “body” vào cả hai từ điển trong danh sách Python của chúng tôi, sau đó ghi đối tượng vào tệp bằng hàm dump[]

________số 8

Sử dụng với open và hàm dump[] chúng ta ghi vào bài viết. tập tin json. Lưu ý rằng hàm dump[] lấy đối tượng Python làm đối số đầu tiên và đối tượng tệp làm đối số thứ hai

Tuy nhiên, chúng tôi nhận được một ngoại lệ liên quan đến thực tế là đối tượng tệp không thể ghi được

Đó là bởi vì chúng ta phải mở tệp rõ ràng ở chế độ ghi

>>> with open['posts.json', 'w'] as json_file:
..     json.dump[data, json_file]
... 
>>>  

Tất cả đều tốt thời gian này

Hãy đọc nội dung của tệp JSON được cập nhật để xác nhận cả hai mục đều có thuộc tính “body”

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
0

Có, tệp JSON đã được cập nhật như chúng tôi mong đợi

Bảng chuyển đổi JSON trong Python

Việc chuyển đổi đối tượng JSON thành đối tượng Python tuân theo các quy ước trong bảng bên dưới

JSONPythonobjectdictarrayliststringstrnumber [int]intnumber [real]floattrueTruefalseFalsenullNone

Hãy chứng minh bằng một số ví dụ về ánh xạ được hiển thị trong bảng chuyển đổi JSON

Trước đây chúng ta đã thấy điều đó thường xuyên khi một chuỗi JSON được giải tuần tự hóa, kết quả là một từ điển

Ví dụ: hãy deserialize mảng JSON sau đây

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
1

Để chuyển đổi mảng này thành một đối tượng Python, chúng ta có thể sử dụng hàm loading[]

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
2

Bạn có thể thấy rằng sau khi giải mã một mảng JSON, chúng tôi đã lấy lại một danh sách Python

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
3

Hãy xem điều gì sẽ xảy ra nếu một đối tượng JSON chứa một mảng là một trong các giá trị của nó

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
4

Như được hiển thị trong bảng chuyển đổi, đối tượng JSON trở thành một từ điển

Đồng thời, giá trị bên trong đối tượng JSON của chúng tôi được ánh xạ tới khóa “các ngày trong tuần” là một mảng JSON và bây giờ là một danh sách Python

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
5

Chuyển đổi các giá trị Boolean, Numeric và Null từ JSON sang Python

Hãy sử dụng một đối tượng khác để hiển thị chuyển đổi JSON sang Python cho các số, booleans và giá trị null

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
6

Bạn có thể thấy rằng sau khi giải mã đối tượng JSON của chúng tôi, điều sau đây sẽ xảy ra

  • sự thật trở thành sự thật
  • sai trở thành Sai
  • số int và số thực trở thành số int và số float trong Python
  • null trở thành Không có
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
7

Bây giờ, làm thế nào chúng ta có thể quay lại từ đối tượng Python sang chuỗi JSON?

Chúng ta có thể sử dụng json. chức năng bãi []…

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
8

Và voilà, chúng tôi đã lấy lại đối tượng JSON ban đầu

Cách in dữ liệu JSON đẹp

Trong phần trước, chúng ta đã thấy một ví dụ về đối tượng JSON trong đó mọi giá trị được in trên một dòng

>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
 
9

Điều này có thể hoạt động nếu đối tượng JSON không chứa quá nhiều thuộc tính và nếu giá trị của nó không quá dài

Tuy nhiên, hãy tưởng tượng nếu bạn có một đối tượng JSON với 50 thuộc tính và giá trị có thể là mảng có nhiều phần tử

Tại thời điểm đó, việc đọc đối tượng JSON khi được biểu diễn trong một dòng sẽ trở nên thực sự khó khăn

Để giải quyết vấn đề này, có một đối số thụt lề tùy chọn mà chúng ta có thể chuyển đến hàm dumps[] khi chúng ta mã hóa một đối tượng Python thành JSON

Hãy xem JSON được mã hóa thay đổi như thế nào nếu chúng ta chuyển ba giá trị khác nhau cho thụt lề. 0, 1 và 2

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
0
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
1
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
2

Khi chúng ta chuyển đối số thụt lề cho json. chức năng dumps[] có hai điều xảy ra

  1. Đối tượng JSON được hiển thị trên nhiều dòng và do đó dễ đọc hơn
  2. Mỗi thuộc tính của đối tượng JSON được bắt đầu bởi một số khoảng trắng phụ thuộc vào giá trị của thụt lề

Dấu phân cách cho các đối tượng JSON trong Python

json. kết xuất và json. các hàm kết xuất cũng chấp nhận một đối số tùy chọn được gọi là dấu tách là một bộ có định dạng sau

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
3

Như bạn có thể tưởng tượng, việc thay đổi các dấu tách mục và khóa sẽ thay đổi hoàn toàn giao diện của một đối tượng JSON

Giá trị dấu phân cách mặc định được sử dụng trong Python để mã hóa các đối tượng thành JSON là [‘, ‘, ‘. ‘]

Lưu ý cách cả mục mặc định và dấu tách khóa đều chứa khoảng trắng. Đây là JSON chúng tôi đã tạo cho đến nay bằng cách sử dụng dấu phân cách mặc định và thụt lề được đặt thành 2

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
2

Bây giờ hãy chú ý đến sự khác biệt nếu chúng ta thay đổi giá trị của đối số dấu phân cách

Chúng tôi có thể xóa khoảng trắng để có được biểu diễn JSON nhỏ gọn hơn

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
5

Sắp xếp các khóa của đối tượng JSON

Trong một số trường hợp, có thể sắp xếp các khóa trong một đối tượng JSON có thể hữu ích

Hãy tưởng tượng bạn có một đối tượng JSON có 100 khóa…

… sắp xếp chúng chắc chắn sẽ làm cho đối tượng dễ đọc hơn

Đây là cách chúng ta có thể sắp xếp các khóa của một đối tượng JSON

Chẳng hạn, hãy bắt đầu với đối tượng Python sau được chuyển đổi thành đối tượng JSON

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
6

Bạn có thể thấy rằng các khóa của đối tượng JSON không được sắp xếp

Để sắp xếp các khóa của một đối tượng JSON khi mã hóa nó từ một đối tượng Python, bạn có thể sử dụng đối số sort_keys, một boolean có giá trị mặc định là Sai

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
7

Do đó, lần này các thuộc tính JSON được sắp xếp theo thứ tự bảng chữ cái

Sử dụng vòng lặp For để in các phần tử trong một mảng JSON

Giả sử chúng ta có tệp JSON sau được gọi là người dùng. json chứa thông tin chi tiết về tất cả người dùng đã đăng ký dịch vụ của bạn

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
8

Làm cách nào chúng ta có thể sử dụng vòng lặp Python for để đi qua mọi người dùng trong mảng JSON?

Trước hết chúng ta phải chuyển đổi nội dung của tệp JSON thành một đối tượng Python. Để làm điều đó, chúng tôi sẽ sử dụng json. hàm tải []

>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
 
9

Sử dụng load[], chúng tôi đã tạo một đối tượng Python có tên là dữ liệu mà sau đó chúng tôi có thể sử dụng để đọc chi tiết về từng người dùng

Đối tượng Python là một từ điển, để đi qua từng người dùng, trước tiên chúng ta phải truy cập khóa 'người dùng'. Sau đó lặp qua nó bằng vòng lặp for

[
  { 
    "userId": 1,
    "postId": 1,
    "title": "How to Convert a JSON Object into a Python Object"
  },
  { 
    "userId": 1,
    "postId": 2,
    "title": "How to Convert a Python Object into a JSON Object"
  }
] 
0

Có ý nghĩa?

Cách lấy JSON từ API bằng Python

Nhưng, làm thế nào bạn sẽ sử dụng những gì chúng ta đã học được cho đến nay trong thực tế?

JSON là định dạng dữ liệu phổ biến nhất được sử dụng cho API hiện nay, điều này có nghĩa là biết cách đọc và viết nó cho phép bạn tích hợp nhiều hệ thống trao đổi dữ liệu ở định dạng JSON

Hãy cùng xem cách bạn sẽ đọc dữ liệu JSON do API công khai trả về

Trong ví dụ này, tôi sẽ sử dụng API sau để trả về các giống chó

[
  { 
    "userId": 1,
    "postId": 1,
    "title": "How to Convert a JSON Object into a Python Object"
  },
  { 
    "userId": 1,
    "postId": 2,
    "title": "How to Convert a Python Object into a JSON Object"
  }
] 
1

Ghi chú. API này có thể thay đổi trong tương lai nhưng các khái niệm cơ bản để truy xuất dữ liệu từ nó vẫn giữ nguyên

Nếu bạn mở URL này trong trình duyệt của mình, bạn sẽ thấy phản hồi API…

…nhưng làm cách nào chúng tôi có thể truy xuất phản hồi bằng Python?

Chúng ta có thể sử dụng urllib. mô-đun yêu cầu để thực hiện yêu cầu GET tới điểm cuối API

[
  { 
    "userId": 1,
    "postId": 1,
    "title": "How to Convert a JSON Object into a Python Object"
  },
  { 
    "userId": 1,
    "postId": 2,
    "title": "How to Convert a Python Object into a JSON Object"
  }
] 
2

Hãy in 200 ký tự đầu tiên của phản hồi bằng toán tử cắt

[
  { 
    "userId": 1,
    "postId": 1,
    "title": "How to Convert a JSON Object into a Python Object"
  },
  { 
    "userId": 1,
    "postId": 2,
    "title": "How to Convert a Python Object into a JSON Object"
  }
] 
3

Bây giờ, chúng ta có thể sử dụng kiến ​​thức của mình trong việc thao tác dữ liệu JSON để chuyển đổi phản hồi đến từ API thành đối tượng Python bằng cách sử dụng json. tải []

[
  { 
    "userId": 1,
    "postId": 1,
    "title": "How to Convert a JSON Object into a Python Object"
  },
  { 
    "userId": 1,
    "postId": 2,
    "title": "How to Convert a Python Object into a JSON Object"
  }
] 
4

Do đó, chúng tôi đã lấy lại được một từ điển và giờ đây chúng tôi có thể truy cập bất kỳ dữ liệu nào chúng tôi cần

Phần kết luận

Bây giờ bạn đã có kiến ​​thức để sử dụng mô-đun json để thực hiện

  • tuần tự hóa [mã hóa]. chuyển đổi một đối tượng Python thành một đối tượng JSON
  • khử lưu huỳnh [giải mã]. chuyển đổi một đối tượng JSON thành một đối tượng Python

Chúng tôi đã học được rằng để làm việc với các chuỗi JSON, bạn có thể sử dụng json. bãi [] và json. tải []. Để làm việc với các tệp JSON, bạn sẽ sử dụng json. bãi [] và json. trọng tải[]

Bạn cũng biết cách in đẹp một đối tượng JSON để cải thiện khả năng đọc của nó và cách đọc phản hồi JSON đến từ một API

JSON là một trong những định dạng để trao đổi dữ liệu giữa các hệ thống và nó không phụ thuộc vào ngôn ngữ lập trình mà các hệ thống được xây dựng

Python cũng cung cấp một cách khác để tuần tự hóa và giải tuần tự hóa dữ liệu của bạn, hãy xem mô-đun Pickle nếu bạn chưa có

Bài viết liên quan

Cách viết danh sách vào tệp bằng Python [Có ví dụ]

Giải thích về lỗi Python loại không thể xóa được. Cách khắc phục

Tham số chức năng mặc định trong Python. Làm thế nào bạn có thể sử dụng chúng?

Claudio Sabato

Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng

Làm cách nào để tìm kiếm giá trị trong JSON Python?

Đọc tệp json bằng chức năng tải của mô-đun JSON
Yêu cầu người dùng nhập dữ liệu
Viết hàm kiểm tra key nhập liệu có trong file
Nếu có thì hãy chuyển khóa cho một chức năng khác để truy xuất các giá trị được liên kết với nó
Nếu không có khóa nào khớp thì in ra các khóa để người dùng chọn

Làm cách nào để tìm kiếm một giá trị trong JSON?

Tìm kiếm giá trị trong mảng JSON .
Sử dụng các câu lệnh SELECT lồng nhau để làm rõ
Trích xuất mảng dự án
Chuyển đổi mảng thành một mảng riêng của các cặp khóa-giá trị bằng cách sử dụng CAST
Trích xuất từng phần tử mảng riêng lẻ bằng toán tử UNNEST
Lọc các giá trị thu được theo các dự án đã hoàn thành và đếm chúng

Làm cách nào để kiểm tra dữ liệu JSON trong Python?

Làm theo các bước bên dưới. .
Đầu tiên, cài đặt jsonschema bằng lệnh pip. pip cài đặt jsonschema
Xác định lược đồ. Mô tả loại JSON mà bạn mong đợi
Chuyển đổi JSON sang đối tượng Python bằng json. tải hoặc json. .
Truyền JSON kết quả cho phương thức xác thực [] của một jsonschema

Làm cách nào để tìm khóa JSON trong Python?

Chương trình Python để kiểm tra xem khóa có tồn tại trong chuỗi JSON hay không Để truy cập các giá trị, bạn nên chuyển đổi chuỗi JSON thành từ điển python bằng cách sử dụng 'json. loading[]' sau khi nhập mô-đun 'json'. Sau đó, bạn có thể kiểm tra xem một khóa có tồn tại trong từ điển hay không và nếu nó tồn tại, bạn có thể truy cập giá trị.

Chủ Đề