Yêu cầu Python lặp lại thông qua phản hồi JSON

Mình mới học python được vài tháng nên chưa có nhiều kinh nghiệm. Tôi đang cố lấy kết quả của một phản hồi API để tôi có thể thực hiện một lệnh gọi API khác. Tôi cần lấy portID và tên hệ thống để có thể thực hiện lệnh gọi API thứ 2 mà tôi muốn. Tôi chỉ cần thông tin LLDP vì thông tin đó có thông tin tôi cần. Dưới đây tôi có hai lệnh gọi API đầu tiên mà tôi đã nghĩ ra. Tôi đang gặp sự cố với lldp_results. Vì nó lồng nhau nên tôi không biết cách lặp qua nó. Dưới đây là kịch bản mà tôi có. nhập pprint nhập meraki API_KEY = bảng điều khiển KEY = meraki. Bảng điều khiểnAPI[API_KEY] tổ chức_id = phản hồi 'ORG-ID' = bảng điều khiển. tổ chức. getOrganizationInventoryDevices[ organization_id, total_pages='all', productTypes='switch' ] để phản hồi chuyển đổi. lldp_results = bảng điều khiển. thiết bị. getDeviceLldpCdp[ switch['serial'] ] pprint. pprint[lldp_results] Đây là thông tin lldp_results [{'ports'. {'1'. {'lldp'. {'portId'. 'c8. d9. d2. cc. bb. aa', 'cổng nguồn'. '1'}}, '12'. {'lldp'. {'portId'. '50. a4. d0. cc. bb. aa', 'cổng nguồn'. '12'}}, '13'. {'lldp'. {'portId'. '48. 21. 0b. cc. bb. aa', 'cổng nguồn'. '13'}}, '14'. {'lldp'. {'portId'. '50. a4. d0. cc. bb. aa', 'cổng nguồn'. '14'}}, '15'. {'lldp'. {'portId'. '48. 21. 0b. cc. bb. aa', 'cổng nguồn'. '15'}}, '3'. {'lldp'. {'portId'. '00. 07. 32. cc. bb. aa', 'cổng nguồn'. '3'}}, '37'. {'cdp'. {'Địa chỉ'. '10. 60. 138. 82', 'thiết bị'. 'AABBCCDDEEFF', 'portId'. 'Cổng 1', 'cổng nguồn'. '37'}, 'lldp'. {'địa chỉ quản lý'. '10. 60. 138. 82', 'portId'. 'AABBCCDDEEFF. P1', 'cổng nguồn'. '37', 'tên hệ thống'. 'AABBCCDDEEFF'}}, '4'. {'lldp'. {'portId'. '50. a4. d0. 92. bb. aa', 'cổng nguồn'. '4'}}, '43'. {'cdp'. {'Địa chỉ'. '10. 60. 138. 81',

Sự phổ biến của JSON phần lớn là do nó sử dụng các cấu trúc dữ liệu chung như đối tượng và mảng được hỗ trợ ở dạng này hay dạng khác bởi phần lớn các ngôn ngữ lập trình. Bài đăng này xem xét cấu trúc cơ bản của dữ liệu được mã hóa JSON, cách cấu trúc đó liên quan đến cấu trúc dữ liệu Python và sử dụng Python để truy cập dữ liệu được mã hóa JSON một cách đáng tin cậy

Sử dụng các ví dụ mã Python

Tất cả các ví dụ mã Python trong bài đăng này đã được kiểm tra bằng Python 3. 8. 2 [macOS] và Python 3. 6. 9 [Ubuntu] và có thể chạy bằng trình thông dịch Python

Các ví dụ giả sử tệp

print[data["updated"]]
0 nằm trong thư mục chính của bạn.
print[data["updated"]]
1 [macOS] và
print[data["updated"]]
2 [Ubuntu]

Nếu dán các ví dụ mã chứa vòng lặp

print[data["updated"]]
3 hoặc câu lệnh
print[data["updated"]]
4, hãy nhấn enter hai lần để thực thi mã và quay lại dấu nhắc trình thông dịch Python của
print[data["updated"]]
5

Cấu trúc của dữ liệu được mã hóa JSON

Bạn có thể tìm thấy mô tả chi tiết hơn về cấu trúc của dữ liệu được mã hóa JSON tại đây, nhưng với mục đích của bài đăng này

  • Dữ liệu được mã hóa JSON bao gồm các mảng, đối tượng, giá trị và cặp tên/giá trị
  • Một mảng được bao quanh bởi dấu ngoặc vuông
    print[data["updated"]]
    
    6 và chứa danh sách các giá trị được phân tách bằng dấu phẩy
  • Một đối tượng được bao quanh bởi dấu ngoặc nhọn
    print[data["updated"]]
    
    7 và chứa danh sách các cặp tên/giá trị được phân tách bằng dấu phẩy
  • Một cặp tên/giá trị bao gồm một tên trong dấu ngoặc kép
    print[data["updated"]]
    
    8, theo sau là dấu hai chấm
    print[data["updated"]]
    
    9, theo sau là một giá trị
  • Một giá trị có thể là một chuỗi, một số, boolean, null, một mảng khác hoặc một đối tượng khác

Hãy xem xét tệp sau chứa dữ liệu được mã hóa JSON trên hai phiên bản macOS

Thẻ giả

Nội dung giả

hệ điều hành Mac. json

print[data["updated"]]
0

 

 

  • Đối tượng cấp cao nhất xác định hai cặp tên/giá trị
  • Đầu tiên là
    print[data["updated"]]
    
    10 và có giá trị chuỗi là
    print[data["updated"]]
    
    11 biểu thị ngày thông tin trong tệp được cập nhật lần cuối
  • Thứ hai là
    print[data["updated"]]
    
    12 có giá trị là một mảng
  • Mỗi giá trị trong mảng
    print[data["updated"]]
    
    12 là một đối tượng đại diện cho một phiên bản macOS duy nhất
  • Mỗi đối tượng đại diện cho một phiên bản macOS chứa thông tin về phiên bản đó ở dạng năm cặp tên/giá trị.
    print[data["updated"]]
    
    14,
    print[data["updated"]]
    
    15,
    print[data["updated"]]
    
    16,
    print[data["updated"]]
    
    17 và
    print[data["updated"]]
    
    18. Tất cả các giá trị là chuỗi

 

 

Truy cập dữ liệu được mã hóa JSON bằng Python

Để cho phép Python truy cập dữ liệu được mã hóa JSON, trước tiên chúng ta cần mở tệp và sau đó đọc nội dung của nó vào bộ nhớ. Cái sau được gọi là giải mã hoặc giải tuần tự hóa và trong Python được thực hiện bằng phương thức

print[data["updated"]]
19 từ thư viện
print[data["updated"]]
10 của Python. Là một phần của quy trình giải tuần tự hóa này, một mảng JSON được chuyển đổi thành danh sách Python
print[data["updated"]]
11 và một đối tượng JSON được chuyển đổi thành từ điển Python
print[data["updated"]]
12

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
4

 

 

Dữ liệu được mã hóa JSON đã giải tuần tự hóa hiện được lưu trữ trong biến

print[data["updated"]]
13. Đầu ra đã được định dạng lại cho rõ ràng

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
6

đầu ra

print[data["updated"]]
7

 

 

Ngoài dấu nháy kép

print[data["updated"]]
14 được thay thế bằng dấu nháy đơn
print[data["updated"]]
15, đầu ra này trông giống hệt với dữ liệu được mã hóa JSON trong tệp của chúng tôi. Tuy nhiên, hãy nhớ rằng những gì cấu thành một mảng trong dữ liệu được mã hóa JSON hiện là danh sách Python
print[data["updated"]]
11 và những đối tượng trong cùng dữ liệu đó hiện là từ điển Python
print[data["updated"]]
12

Để truy cập một phần dữ liệu cụ thể, chúng ta có thể sử dụng ký hiệu ngoặc. Ví dụ: để lấy ngày thông tin được cập nhật lần cuối

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]

đầu ra

print[data["updated"]]
1

 

 

Để có được thông tin cụ thể về một phiên bản macOS cụ thể có liên quan nhiều hơn một chút

  • Thông tin về cả hai phiên bản macOS có trong danh sách
    print[data["updated"]]
    
    12
  • Mỗi giá trị của danh sách
    print[data["updated"]]
    
    12 là một từ điển chứa thông tin về một phiên bản macOS duy nhất
  • Chúng tôi có thể truy cập thông tin trong một từ điển cụ thể bằng cách sử dụng vị trí hoặc chỉ mục của nó trong danh sách
    print[data["updated"]]
    
    12. Vì danh sách Python không được lập chỉ mục, nên từ điển đầu tiên có chỉ mục là
    print[data["updated"]]
    
    71, từ điển thứ hai có chỉ mục là
    print[data["updated"]]
    
    72

GHI CHÚ. là một công cụ hữu ích hiển thị dữ liệu được mã hóa JSON hiển thị số lượng giá trị trong danh sách [mảng JSON] và chỉ mục của từng giá trị trong danh sách đó. Xin lưu ý rằng bạn cần chuyển sang chế độ xem dạng cây. Ngoài ra, trình chỉnh sửa mã Visual Studio Code có chế độ xem Phác thảo hiển thị dữ liệu được mã hóa JSON theo cách tương tự

Vì vậy, để có được ngày macOS Mojave được công bố, chúng ta cần nhắm mục tiêu từ điển đầu tiên của danh sách

print[data["updated"]]
12

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
1

đầu ra

print[data["updated"]]
7

 

 

Để có được ngày cả macOS Mojave và macOS Catalina được phát hành, chúng tôi cần nhắm mục tiêu từ điển đầu tiên của danh sách

print[data["updated"]]
12 và sau đó là từ điển thứ hai của nó

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
3

đầu ra

print[data["updated"]]
4

 

 

Hãy làm cho mọi thứ thú vị hơn một chút và thêm một số thông tin khác cho từng phiên bản macOS vào dữ liệu được mã hóa JSON của chúng tôi

Thẻ giả

Nội dung giả

hệ điều hành Mac. json

print[data["updated"]]
40

 

 

Trong Python, dữ liệu được mã hóa JSON được cập nhật trong tệp cần được giải tuần tự hóa lại

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
41

 

 

Ở đây chúng tôi sử dụng câu lệnh

print[data["updated"]]
4 với hàm
print[data["updated"]]
76. Điều này đảm bảo xử lý ngoại lệ tốt hơn và không yêu cầu hàm
print[data["updated"]]
77 phải được gọi một cách rõ ràng vì câu lệnh
print[data["updated"]]
4 xử lý việc thu thập và giải phóng tài nguyên phù hợp

Dữ liệu khử lưu huỳnh được cập nhật. Đầu ra đã được định dạng lại cho rõ ràng

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
6

đầu ra

print[data["updated"]]
43

 

 

  • Mỗi từ điển trong danh sách
    print[data["updated"]]
    
    12 hiện có thêm hai cặp tên/giá trị.
    print[data["updated"]]
    
    30 và
    print[data["updated"]]
    
    31
  • print[data["updated"]]
    
    30 là danh sách có giá trị là tất cả các chuỗi với mỗi chuỗi biểu thị yêu cầu hệ thống tối thiểu để chạy phiên bản macOS cụ thể đó
  • print[data["updated"]]
    
    31 cũng là một danh sách, nhưng mỗi giá trị của nó là một từ điển biểu thị thông tin trên mỗi bản phát hành của một phiên bản macOS duy nhất được cung cấp bởi bốn cặp tên/giá trị.
    print[data["updated"]]
    
    15,
    print[data["updated"]]
    
    35,
    print[data["updated"]]
    
    36 và
    print[data["updated"]]
    
    18

Để có được yêu cầu hệ thống tối thiểu đầu tiên để chạy macOS Mojave

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
44

đầu ra

print[data["updated"]]
45

 

 

Để có yêu cầu hệ thống tối thiểu thứ nhất và thứ hai để chạy macOS Catalina

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
46

đầu ra

print[data["updated"]]
47

 

 

Để lấy số bản dựng của bản phát hành đầu tiên của macOS Catalina

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
48

đầu ra

print[data["updated"]]
49

 

 

Để lấy số bản dựng của bản phát hành thứ tám của macOS Mojave. Rất tiếc. Chỉ có bảy bản phát hành macOS Mojave

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
60

đầu ra

print[data["updated"]]
61

 

 

Để lấy số bản dựng và phiên bản Darwin của bản phát hành đầu tiên của macOS Catalina

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
62

đầu ra

print[data["updated"]]
63

 

 

Để nhận phiên bản, số bản dựng và phiên bản Darwin của bản phát hành thứ nhất, thứ hai và thứ ba của macOS Mojave

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
64

đầu ra

print[data["updated"]]
65

 

 

Lặp qua dữ liệu được mã hóa JSON

Như đã thấy rõ từ các ví dụ trên, việc truy cập nhiều giá trị trong danh sách rất cồng kềnh và dễ bị lỗi. Mỗi giá trị – cho dù đó là một chuỗi, một số, boolean, null hay một từ điển – phải được nhắm mục tiêu rõ ràng bằng cách sử dụng vị trí hoặc chỉ mục của nó trong danh sách. Thông thường, tổng số giá trị trong danh sách không được biết trước hoặc số lượng giá trị trong danh sách có tên tương tự khác nhau dẫn đến lỗi chỉ mục nằm ngoài phạm vi. Ví dụ: danh sách

print[data["updated"]]
31 cho macOS Mojave chứa bảy giá trị [từ điển], nhưng đối với macOS Catalina chỉ chứa sáu

Để khắc phục điều này, chúng ta có thể sử dụng câu lệnh

print[data["updated"]]
3 để lặp hoặc lặp qua mọi giá trị trong danh sách lặp lại các bước giống nhau trong mỗi vòng lặp hoặc lần lặp

Ví dụ: để lấy tên mã của mọi phiên bản macOS mà không cần sử dụng vòng lặp

print[data["updated"]]
3

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
66

đầu ra

print[data["updated"]]
67

 

 

Ngoài ra, để lấy tên mã của mọi phiên bản macOS bằng vòng lặp

print[data["updated"]]
3

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
68

đầu ra

print[data["updated"]]
67

 

 

Vòng lặp lặp lại cho mọi giá trị [từ điển] trong danh sách

print[data["updated"]]
12. Trên mỗi vòng lặp, giá trị danh sách hiện tại được ghi vào biến
print[data["updated"]]
43. Sau đó, chúng tôi sử dụng
print[data["updated"]]
44 để lấy tên mã của phiên bản macOS đó

Để lấy tên mã của mọi phiên bản macOS cùng với các yêu cầu hệ thống tối thiểu của chúng mà không cần sử dụng vòng lặp

print[data["updated"]]
3

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
70

đầu ra

print[data["updated"]]
71

 

 

Ngoài ra, để có được thông tin tương tự bằng cách sử dụng vòng lặp

print[data["updated"]]
3

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
72

đầu ra

print[data["updated"]]
71

 

 

Trong trường hợp này, các vòng lặp

print[data["updated"]]
3 được lồng vào nhau. Vòng lặp
print[data["updated"]]
3 bên ngoài giống như trong ví dụ trước. Vòng lặp bên trong
print[data["updated"]]
3 lặp lại cho mọi giá trị [chuỗi] trong danh sách
print[data["updated"]]
30. Trên mỗi vòng lặp, giá trị danh sách hiện tại được ghi vào biến
print[data["updated"]]
401. Sau đó, để có được từng yêu cầu, chúng tôi chỉ cần sử dụng
print[data["updated"]]
401

Vì danh sách

print[data["updated"]]
30 được chứa trong danh sách
print[data["updated"]]
12 nên chúng ta phải lồng các vòng lặp
print[data["updated"]]
3. Không làm như vậy sẽ cho kết quả không đầy đủ khi chỉ nhắm mục tiêu vào danh sách
print[data["updated"]]
30 của giá trị cuối cùng trong danh sách
print[data["updated"]]
12

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
74

đầu ra

print[data["updated"]]
75

 

 

Cuối cùng, để bao gồm thêm phiên bản của mọi bản phát hành macOS mà không cần sử dụng vòng lặp

print[data["updated"]]
3

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
76

đầu ra

print[data["updated"]]
77

 

 

Ngoài ra, sử dụng vòng lặp

print[data["updated"]]
3

Thẻ giả

Nội dung giả

Chỉ huy

print[data["updated"]]
78

đầu ra

print[data["updated"]]
77

 

 

Vòng lặp

print[data["updated"]]
3 cuối cùng lặp lại cho mọi giá trị [từ điển] trong danh sách
print[data["updated"]]
31. Trên mỗi vòng lặp, giá trị danh sách hiện tại được ghi vào biến
print[data["updated"]]
412. Sau đó, chúng tôi sử dụng
print[data["updated"]]
413 để lấy phiên bản của mỗi bản phát hành

Tương tự như danh sách

print[data["updated"]]
30, danh sách
print[data["updated"]]
31 cũng được chứa trong danh sách
print[data["updated"]]
12, vì vậy vòng lặp
print[data["updated"]]
3 nhắm mục tiêu danh sách
print[data["updated"]]
31 cũng được lồng trong vòng lặp
print[data["updated"]]
3 nhắm mục tiêu danh sách
print[data["updated"]]
12

 

 

ghi chú
  • Thông tin về các bản phát hành macOS [Mac OS X] có trong tệp

    print[data["updated"]]
    
    0 chỉ nhằm mục đích trình diễn. Phiên bản của tệp được sử dụng trong bài đăng này là một tập hợp con của dữ liệu có trong bản gốc. Phiên bản mới nhất, đầy đủ có thể được tìm thấy ở đây. Mặc dù mọi nỗ lực đã được thực hiện để đảm bảo dữ liệu này là chính xác nhưng độ chính xác của nó không được đảm bảo

  • phân tích cú pháp-json. py là một tập lệnh Python được sử dụng để phân tích cú pháp dữ liệu được mã hóa JSON trong tệp

    print[data["updated"]]
    
    0 và dựa trên các ví dụ trong bài đăng này. một nút. js chạy tập lệnh Python này và hiển thị kết quả có thể được tìm thấy tại macos. công nghệ-otaku. com

    Làm cách nào để lặp lại tệp JSON trong Python?

    Lặp qua JSON bằng các khóa trong Python . Nó sẽ phân tích cú pháp 'json_multi dimensions. json' làm từ điển 'my_dict'. import the JSON module and parse the JSON file using the 'load' method as shown below. It will parse the 'json_multidimensional. json' file as the dictionary 'my_dict'.

    Làm cách nào để lấy dữ liệu từ phản hồi JSON trong Python?

    Chỉ cần thực hiện phản hồi. json[] , thế là xong. phản ứng. json[] trả về phản hồi JSON ở định dạng từ điển Python để chúng tôi có thể truy cập JSON bằng các cặp khóa-giá trị.

    Làm cách nào để nhận phản hồi JSON từ API REST trong Python?

    Để nhận JSON từ điểm cuối API REST, bạn phải gửi yêu cầu HTTP GET đến máy chủ API REST và cung cấp Chấp nhận. tiêu đề yêu cầu ứng dụng/json . chấp nhận. tiêu đề application/json cho máy chủ API REST biết rằng ứng dụng khách API muốn nhận dữ liệu ở định dạng JSON.

    Làm cách nào để in phản hồi JSON bằng Python?

    Cách in đẹp một đối tượng JSON từ các yêu cầu Python .
    Chúng tôi đã tải phản hồi yêu cầu GET
    Chúng tôi đã tuần tự hóa phản hồi bằng cách sử dụng. phương thức json[]
    Sau đó, chúng tôi đã sử dụng hàm dumps[] với thụt lề là 4 để in phản hồi đẹp

Chủ Đề