Python kiểm tra xem khóa JSON có rỗng không

Dữ liệu JSON có khái niệm về các mảng và đối tượng rỗng và rỗng. Phần này giải thích cách mỗi khái niệm này được ánh xạ tới các khái niệm đối tượng dữ liệu là null và unset

giá trị null

JSON có một giá trị đặc biệt được gọi là null, giá trị này có thể được đặt trên bất kỳ loại dữ liệu nào bao gồm mảng, đối tượng, số và kiểu boolean

34	{				        Schema types
35	    "id":null,				[integer]
36	    "firstName": null,			[string]
37	    "address": null,			[Address complex type with maxOccurs = 1]
38	    "homeAddresses":null		[Address complex type with maxOccurs > 1]
39	    "phoneNumbers": null		[string with maxOccurs > 1]
40	}

Xem xét ví dụ trước trong đó dữ liệu JSON có giá trị null được phân tích cú pháp thành một đối tượng dữ liệu, điều sau đây là đúng

  • id - Nếu thuộc tính được định nghĩa là không thể thực hiện được trong lược đồ, thì thuộc tính đó sẽ được đặt thành null. Nếu thuộc tính không được xác định là không thể thực hiện được, thì nó sẽ đưa ra một ngoại lệ
  • firstName - Giá trị null được đặt trên thuộc tính
  • địa chỉ - Nếu thuộc tính được định nghĩa là không thể thực hiện được trong lược đồ, thì thuộc tính đó sẽ được đặt thành null. Nếu thuộc tính không được xác định là không thể thực hiện được, thì nó sẽ đưa ra một ngoại lệ
  • homeAddresses - Lược đồ không cho phép vô hiệu đối với thuộc tính này do đó nó sẽ không được đặt
  • phoneNumbers - Thuộc tính này phải được xác định là không thể thực hiện được trong lược đồ nếu không nó sẽ đưa ra một ngoại lệ

Khi tuần tự hóa thành JSON, nếu một giá trị của thuộc tính trong đối tượng dữ liệu là null, thì nó sẽ được tuần tự hóa dưới dạng JSON null

Bỏ đặt thuộc tính

Không tồn tại thuộc tính từ dữ liệu JSON ánh xạ tới thuộc tính chưa đặt trong không gian đối tượng dữ liệu. Nếu thuộc tính trong đối tượng dữ liệu không được đặt [không đặt], thì thuộc tính sẽ không xuất hiện trong dữ liệu JSON

tài sản trống

Khái niệm rỗng JSON áp dụng cho mảng và đối tượng như hình bên dưới

41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}

Trong trường hợp địa chỉ, một đối tượng dữ liệu địa chỉ trống được tạo. Đối tượng dữ liệu không có khái niệm về danh sách trống. Do đó, không có hành động nào được thực hiện trên đối tượng dữ liệu đối với hai thuộc tính đó

Không có NULL trong Python. Thay vào đó, nó không có. JSON có kiểu dữ liệu NULL, nhưng nó không có kiểu dữ liệu Không có. Một từ điển trong Python không thể có giá trị null nhưng có thể có “null” là giá trị có thể được hiểu là một chuỗi

Xử lý JSON NULL trong Python

Để xử lý JSON NULL trong Python, hãy sử dụng json. phương thức tải []. Phương thức loading[] trả về giá trị null tương đương với Python, là Không có

Để làm việc với dữ liệu json trong Python, hãy nhập thư viện json. Sau đó, xác định một đối tượng json bao gồm một giá trị null, mà chúng ta sẽ chuyển đổi thành Không có

import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]

đầu ra

{'name': 'WandaVision', 'service': None}

Và bạn nhận được giá trị Không, tương đương với null trong json

Đây là cách bạn có thể xử lý giá trị null của JSON trong Python

Đó là nó cho hướng dẫn này

Facebook

Twitter

Pinterest

WhatsApp

Bài viết trước Cách chuyển đổi Python Set thành Tuple

Bài viết tiếp theo Python os. con đường. hàm isfile[] với ví dụ

kranal

https. //appdividend. com/

Krunal Lathiya là Kỹ sư phần mềm với hơn tám năm kinh nghiệm. Anh ấy đã phát triển một nền tảng vững chắc về các nguyên tắc khoa học máy tính và niềm đam mê giải quyết vấn đề. Ngoài ra, Krunal có kiến ​​thức tuyệt vời về Khoa học dữ liệu và Học máy, đồng thời là chuyên gia về Ngôn ngữ Python. Krunal có kinh nghiệm với nhiều ngôn ngữ lập trình và công nghệ khác nhau, bao gồm PHP, R, Golang và JavaScript. Anh ấy cảm thấy thoải mái khi làm việc trong lĩnh vực phát triển front-end và back-end

Gần đây, tôi đang lướt qua nguồn cấp dữ liệu Twitter của mình để tìm các bài viết, thư viện mới về Go, v.v. và tôi tình cờ thấy một tweet có thông báo này

# Golang's JSON Unmarshalling là xấu

Tôi thậm chí không chắc làm thế nào nó tìm được đường vào nguồn cấp dữ liệu của tôi. Tôi không theo dõi người đã nói điều đó, vì vậy lý do duy nhất khiến nó xuất hiện trong nguồn cấp dữ liệu của tôi là thẻ bắt đầu bằng #

import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
4. Bất kể, điều này gây ấn tượng với tôi như một tiếng kêu cứu lớn. Trước đây, tôi đã viết về việc sử dụng JSON với Go trong loạt bài Advent của Học viện Gopher [xem https. //Blog. gopheracademy. com/advent-2016/advanced-encoding-decoding/] và cá nhân tôi chưa bao giờ thấy JSON được xử lý kém trong Go. Có lẽ không phải là ngôn ngữ dễ nhất trên thế giới, nhưng chắc chắn không phải là "tệ"

JSON có hai loại giá trị
import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
5

Sau khi liên hệ với tôi, tôi thấy rõ rằng vấn đề ở đây không phải dành riêng cho Go, mà là sự thiếu sót của JSON được sử dụng cùng với bất kỳ ngôn ngữ đánh máy nào. Trong JSON có hai loại

import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
5 hiệu quả

  1. Khi khóa được cung cấp và giá trị được nêu rõ ràng là
    import json
    
    data = '{ "name":"WandaVision", "service":null }'
    
    # parse the data
    
    dict = json.loads[data]
    print[dict]
    
    5
  2. Khi khóa không được cung cấp và giá trị ngầm định là
    import json
    
    data = '{ "name":"WandaVision", "service":null }'
    
    # parse the data
    
    dict = json.loads[data]
    print[dict]
    
    5

Thật không may [hay may mắn thay?], đó không phải là cách Go, hoặc bất kỳ ngôn ngữ đánh máy nào hoạt động. Chúng tôi không khai báo một cấu trúc [hoặc lớp] và mất một trường một cách kỳ diệu khi nó không được xác định. Trường đó sẽ luôn hiện diện và giá trị của trường đó sẽ là

import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
9 hoặc một giá trị hợp lệ

Ví dụ: hãy tưởng tượng chúng ta có một cấu trúc Blog và

{"title": "some new title"}
0 là một thuộc tính JSON tùy chọn, mã của bạn có thể trông như thế này

type Blog struct {
  ID          int    `json:"id"`
  Title       string `json:"title"`
  Markdown    string `json:"markdown"`
  PublishedAt *int   `json:"published_at"`
}

Điều này để lại cho chúng tôi hai tùy chọn cho

{"title": "some new title"}
0 - nó sẽ tham chiếu đến một số nguyên hoặc nó sẽ là số không. Chúng tôi không có bất kỳ cách nào để xác định xem đó là
import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
9 là ẩn hay rõ ràng, chúng tôi chỉ biết liệu đó là con số không hay không

Tại sao chúng ta cần biết sự khác biệt giữa giá trị null ẩn và rõ ràng?

Hầu hết thời gian, sự khác biệt giữa khóa được đặt thành null và hoàn toàn không được đặt là không liên quan. Nếu giá trị đã xuất bản được đặt thành null trong thời gian

{"title": "some new title"}
3, chúng tôi có thể cho rằng bài đăng đó chưa được xuất bản và tiếp tục

Trường hợp điều này phát huy tác dụng là khi chúng tôi đang thực hiện cập nhật một phần. Ví dụ: nếu chúng tôi có API JSON và chúng tôi cho phép người dùng cập nhật bài đăng trên blog của họ thông qua yêu cầu

{"title": "some new title"}
4, thì người dùng API có thể gửi tải trọng JSON sau để cập nhật tiêu đề của bài đăng trên blog

{"title": "some new title"}

Khi trường

{"title": "some new title"}
5 không được cung cấp, loại
{"title": "some new title"}
6 của chúng tôi sẽ đặt trường thành null và chúng tôi có thể cho rằng điều này có nghĩa là người dùng không muốn cập nhật trường. Nhưng điều gì sẽ xảy ra khi người dùng muốn cập nhật trường này?

Thật không may, mã của chúng tôi sẽ không biết sự khác biệt giữa việc đặt trường thành null một cách rõ ràng và không cung cấp khóa. Vậy làm thế nào để chúng tôi xử lý điều này trong Go?

Xác định xem khóa có được cung cấp hay không

Điều đầu tiên cần lưu ý là chúng ta có thể tùy chỉnh cách JSON được sắp xếp theo thứ tự cho bất kỳ loại nào bằng cách triển khai giao diện. Điều đó có nghĩa là chúng ta có thể thay thế trường

{"title": "some new title"}
0 của mình bằng một loại mới và viết mã của riêng mình để xử lý phân tích cú pháp JSON

Điều thứ hai cần nhớ là nếu trường của chúng ta là loại con trỏ [ví dụ:

{"title": "some new title"}
9], thì phương thức
41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
50 của nó sẽ không bao giờ được gọi nếu giá trị là
import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
5 hoặc nếu khóa không bao giờ được cung cấp. Điều đó có nghĩa là chúng tôi cần đảm bảo rằng chúng tôi KHÔNG sử dụng con trỏ nếu chúng tôi cần xác định xem khóa đã được đặt chưa

Đặt hai mẩu tin đó lại với nhau, chúng ta có thể tạo một loại

41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
52 tùy chỉnh sẽ được sử dụng để xác định xem một giá trị đã được đặt hay chưa và giá trị đó có phải là null hay không

41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
5

Nếu chúng ta thay thế loại

41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
53 bằng loại
41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
52 [không phải con trỏ] thì phương thức
41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
50 sẽ được gọi bất cứ khi nào chúng ta phân tích cú pháp một số JSON thành đối tượng
{"title": "some new title"}
6, cho chúng ta cơ hội xử lý phần sắp xếp lại đó bằng mã tùy chỉnh của mình. Cụ thể, chúng ta có thể đặt một vài cờ để xác định liệu khóa có được cung cấp hay không

Nếu bạn muốn xem điều này hoạt động như thế nào, chúng ta có thể kiểm tra nó bằng một vài chuỗi JSON bằng mã bên dưới hoặc bạn có thể chạy nó trên Go Playground

import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
2

Tóm tắt

Mặc dù có thể có các thiết kế API tốt hơn để tránh vấn đề này, nhưng nếu bạn gặp phải tình huống cần hỗ trợ cả hai loại

import json

data = '{ "name":"WandaVision", "service":null }'

# parse the data

dict = json.loads[data]
print[dict]
5 cho khóa JSON, bạn có thể tận dụng kỹ thuật này để biến điều đó thành hiện thực. Chỉ cần thay thế trường
41	{
42	    "address":{}
43	     "homeAddresses":[]
44	      "phoneNumbers":[]
45	}
58 bằng bất kỳ loại nào bạn cần hỗ trợ và bạn sẽ được đặt

Tìm hiểu phát triển web với Go

Đăng ký danh sách gửi thư của tôi và tôi sẽ gửi cho bạn một mẫu MIỄN PHÍ từ khóa học của tôi - Phát triển Web với Go. Mẫu bao gồm 19 đoạn ghi hình và một vài chương đầu tiên của cuốn sách

Bạn cũng sẽ nhận được email từ tôi về các kỹ thuật mã hóa Go, các khóa học sắp tới [bao gồm cả các khóa học MIỄN PHÍ] và giảm giá khóa học

Làm cách nào để kiểm tra xem giá trị JSON có phải là null không?

Trả về giá trị . isNull[] JsonObject::isNull[] trả về một bool cho biết liệu JsonObject có trỏ đến thứ gì đó không. true nếu JsonObject là null, false nếu JsonObject hợp lệ và trỏ đến một đối tượng.

Làm cách nào để kiểm tra khóa trong JSON 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ị.

Khóa JSON có thể rỗng không?

JSON có hai loại giá trị null . Khi khóa được cung cấp và giá trị được nêu rõ ràng là null . Khi khóa không được cung cấp và giá trị hoàn toàn là null.

Làm cách nào để kiểm tra xem giá trị có tồn tại trong đối tượng JSON python không?

JsonObject. containsKey[] kiểm tra xem khóa có tồn tại trong đối tượng được trỏ bởi JsonObject hay không. Nếu JsonObject là null, hàm này trả về false.

Chủ Đề