Hướng dẫn python json nested objects - các đối tượng lồng nhau trong python json

I'm trying to get the zip code for a particular city using zippopotam.us. I have the following code which works, except when I try to access the post code key which returns TypeError: expected string or buffer

r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()

data = json.loads(j)

print j['state']
print data['places']['latitude']

Full JSON output:

{
"country abbreviation": "US",
"places": [
    {
        "place name": "Belmont",
        "longitude": "-71.4594",
        "post code": "02178",
        "latitude": "42.4464"
    },
    {
        "place name": "Belmont",
        "longitude": "-71.2044",
        "post code": "02478",
        "latitude": "42.4128"
    }
],
"country": "United States",
"place name": "Belmont",
"state": "Massachusetts",
"state abbreviation": "MA"
}

Chuyển đến nội dung chính

Trình duyệt này không còn được hỗ trợ nữa.

Hãy nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, bản cập nhật bảo mật và hỗ trợ kỹ thuật.

Format Nested JSON Output with PATH Mode (SQL Server)

  • Bài viết
  • 04/21/2022
  • 2 phút để đọc

Trong bài viết này

Applies to: SQL Server 2016 (13.x) and later SQL Server 2016 (13.x) and later

Để duy trì kiểm soát đầy đủ đối với đầu ra của mệnh đề JSON, chỉ định tùy chọn đường dẫn.FOR JSON clause, specify the PATH option.

Chế độ đường dẫn cho phép bạn tạo các đối tượng bao bọc và các thuộc tính phức tạp của tổ. Các kết quả được định dạng là một mảng các đối tượng JSON. mode lets you create wrapper objects and nest complex properties. The results are formatted as an array of JSON objects.

Thay thế là sử dụng tùy chọn Tự động để định dạng đầu ra tự động dựa trên cấu trúc của câu lệnh Chọn.AUTO option to format the output automatically based on the structure of the SELECT statement.

  • Để biết thêm thông tin về tùy chọn Tự động, hãy tự động xem Định dạng đầu ra JSON với chế độ tự động.AUTO option, see Format JSON Output Automatically with AUTO Mode .
  • Để biết tổng quan về cả hai tùy chọn, hãy xem kết quả truy vấn định dạng là JSON với JSON.

Dưới đây là một số ví dụ về mệnh đề JSON với tùy chọn đường dẫn. Định dạng kết quả lồng nhau bằng cách sử dụng tên cột được phân tách chấm hoặc bằng cách sử dụng các truy vấn lồng nhau, như được hiển thị trong các ví dụ sau. Theo mặc định, các giá trị null không được bao gồm trong đầu ra JSON. Azure Data Studio là trình chỉnh sửa truy vấn được đề xuất cho các truy vấn JSON vì nó tự động định dạng kết quả JSON (như đã thấy trong bài viết này) thay vì hiển thị một chuỗi phẳng.FOR JSON clause with the PATH option. Format nested results by using dot-separated column names or by using nested queries, as shown in the following examples. By default, null values are not included in FOR JSON output. Azure Data Studio is the recommended query editor for JSON queries because it auto-formats the JSON results (as seen in this article) instead of displaying a flat string.

Ví dụ - Tên cột được phân tách chấm

Các truy vấn sau đây định dạng năm hàng đầu tiên từ bảng AdventureWorks Person là JSON.

Mệnh đề đường dẫn JSON sử dụng bí danh cột hoặc tên cột để xác định tên khóa trong đầu ra JSON. Nếu bí danh chứa các dấu chấm, tùy chọn đường dẫn sẽ tạo các đối tượng lồng nhau.FOR JSON PATH clause uses the column alias or column name to determine the key name in the JSON output. If an alias contains dots, the PATH option creates nested objects.

Truy vấn

SELECT TOP 5   
       BusinessEntityID As Id,  
       FirstName, LastName,  
       Title As 'Info.Title',  
       MiddleName As 'Info.MiddleName'  
   FROM Person.Person  
   FOR JSON PATH   

Kết quả

[{
	"Id": 1,
	"FirstName": "Ken",
	"LastName": "Sanchez",
	"Info": {
		"MiddleName": "J"
	}
}, {
	"Id": 2,
	"FirstName": "Terri",
	"LastName": "Duffy",
	"Info": {
		"MiddleName": "Lee"
	}
}, {
	"Id": 3,
	"FirstName": "Roberto",
	"LastName": "Tamburello"
}, {
	"Id": 4,
	"FirstName": "Rob",
	"LastName": "Walters"
}, {
	"Id": 5,
	"FirstName": "Gail",
	"LastName": "Erickson",
	"Info": {
		"Title": "Ms.",
		"MiddleName": "A"
	}
}]

Ví dụ - Nhiều bảng

Nếu bạn tham khảo nhiều bảng trong truy vấn, cho đường dẫn JSON sẽ làm tổ, mỗi cột bằng bí danh của nó. Truy vấn sau đây tạo ra một đối tượng JSON trên mỗi (OrderHeader, OrderDetails) được tham gia vào truy vấn.FOR JSON PATH nests each column using its alias. The following query creates one JSON object per (OrderHeader, OrderDetails) pair joined in the query.

Truy vấn

SELECT TOP 2 H.SalesOrderNumber AS 'Order.Number',  
        H.OrderDate AS 'Order.Date',  
        D.UnitPrice AS 'Product.Price',  
        D.OrderQty AS 'Product.Quantity'  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON PATH   

Kết quả

[{
	"Order": {
		"Number": "SO43659",
		"Date": "2011-05-31T00:00:00"
	},
	"Product": {
		"Price": 2024.9940,
		"Quantity": 1
	}
}, {
	"Order": {
		"Number": "SO43659"
	},
	"Product": {
		"Price": 2024.9940
	}
}]

Ví dụ - Nhiều bảng

Nếu bạn tham khảo nhiều bảng trong truy vấn, cho đường dẫn JSON sẽ làm tổ, mỗi cột bằng bí danh của nó. Truy vấn sau đây tạo ra một đối tượng JSON trên mỗi (OrderHeader, OrderDetails) được tham gia vào truy vấn.

Tìm hiểu thêm về JSON trong SQL Server và Azure SQL cơ sở dữ liệu

  • Video Microsoft

Để giới thiệu trực quan về hỗ trợ JSON tích hợp trong cơ sở dữ liệu SQL Server và Azure SQL, hãy xem các video sau:

JSON như một cầu nối giữa Noql và thế giới quan hệ

Xem thêm

Cho mệnh đề (Transact-SQL)