使用 JSONPath - Amazon Kinesis Data Analytics for SQL Applications 開發人員指南

在仔細考慮之後,我們決定在兩個步驟中停止 Amazon Kinesis Data Analytics for SQL 應用程式:

1. 從 2025 年 10 月 15 日起,您將無法為SQL應用程式建立新的 Kinesis Data Analytics。

2. 我們將從 2026 年 1 月 27 日起刪除您的應用程式。您將無法啟動或操作SQL應用程式的 Amazon Kinesis Data Analytics。從那時SQL起,Amazon Kinesis Data Analytics 將不再提供 的支援。如需詳細資訊,請參閱Amazon Kinesis Data Analytics for SQL 應用程式終止

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 JSONPath

注意

2023 年 9 月 12 日之後,如果尚未使用 Kinesis Data Analytics for SQL,您將無法使用 Kinesis Data Firehose 做為建立新應用程式的來源。如需詳細資訊,請參閱限制

JSONPath 是查詢 JSON 物件元素的標準化方式。JSONPath 使用路徑表達式導覽 JSON 文件中的元素、巢狀元素及陣列。如需 JSON 的詳細資訊,請參閱介紹 JSON

Amazon Kinesis Data Analytics 會在應用程式的來源結構描述中使用 JsonPath 運算式,藉此在內含 JSON 格式資料的串流來源中識別資料元素。

如需將串流資料映射至應用程式輸入串流的詳細資訊,請參閱 將串流來源元素映射至 SQL 輸入資料欄

使用 JSONPath 存取 JSON 元素

接下來,你可以找到如何使用 JSONPath 表達式來存取 JSON 格式資料的各種元素。針對本節中的範例,假設來源串流包含下列 JSON 記錄:

{ "customerName":"John Doe", "address": { "streetAddress": [ "number":"123", "street":"AnyStreet" ], "city":"Anytown" } "orders": [ { "orderId":"23284", "itemName":"Widget", "itemPrice":"33.99" }, { "orderId":"63122", "itemName":"Gadget", "itemPrice":"22.50" }, { "orderId":"77284", "itemName":"Sprocket", "itemPrice":"12.00" } ] }

存取 JSON 元素

若要用 JSONPath 查詢 JSON Data 中的元素,請使用以下語法。在此,$ 表示資料階層的根,elementName 是要查詢的元素節點名稱。

$.elementName

下列運算式會查詢上述 JSON 範例中的 customerName 元素。

$.customerName

上述運算式會從前面的 JSON 記錄傳回下列項目。

John Doe
注意

路徑運算式區分大小寫。運算式 $.customername 會從前面的 JSON 範例傳回 null

注意

如果路徑表達式指定的位置沒有出現任何元素,則表達式會傳回 null。下列運算式會從前面的 JSON 範例傳回 null,因為沒有相符的元素。

$.customerId

存取巢狀 JSON 元素

若要查詢巢狀 JSON 元素,請使用下列語法。

$.parentElement.element

下列運算式會查詢上述 JSON 範例中的 city 元素。

$.address.city

上述運算式會從前面的 JSON 記錄傳回下列項目。

Anytown

您可以使用以下語法查詢更多層次的子元素。

$.parentElement.element.subElement

下列運算式會查詢上述 JSON 範例中的 street 元素。

$.address.streetAddress.street

上述運算式會從前面的 JSON 記錄傳回下列項目。

AnyStreet

存取陣列

您可以通過以下方式存取 JSON 陣列中的資料:

  • 將陣列中的所有元素擷取為單一資料列。

  • 將陣列中的每個元素擷取為單獨的列。

將陣列中的所有元素擷取為單一資料列。

若要將陣列的全部內容查詢為單一資料列,請使用下列語法。

$.arrayObject[0:]

下列運算式會查詢本節使用之上述 JSON 範例中的 orders 元素完整內容。它用單欄單列傳回陣列內容。

$.orders[0:]

上述運算式會從本節使用之範例 JSON 記錄傳回下列項目。

[{"orderId":"23284","itemName":"Widget","itemPrice":"33.99"},{"orderId":"61322","itemName":"Gadget","itemPrice":"22.50"},{"orderId":"77284","itemName":"Sprocket","itemPrice":"12.00"}]

將陣列中的所有元素擷取為單一資料列。

若要將陣列中的個別元素查詢為單獨的資料列,請使用下列語法。

$.arrayObject[0:].element

下列運算式會查詢前述 JSON 範例中的 orderId 元素,並將每個陣列元素傳回為個別的資料列。

$.orders[0:].orderId

上述運算式會從前面的 JSON 記錄傳回下列項目,每個資料項目都會以個別的資料列傳回。

23284

63122

77284

注意

如果查詢非陣列元素的運算式包含在查詢個別陣列元素的結構描述中,則會針對陣列中的每個元素重複非陣列元素。舉例來說,假設上述 JSON 範例的結構描述包含下列運算式:

  • $.customerName

  • $.orders[0:].orderId

在這種情況下,來自範例輸入串流元素的傳回資料列類似於下列項目,每個 orderId 元素都會重複 name 元素。

John Doe

23284

John Doe

63122

John Doe

77284

注意

下列限制適用於 Amazon Kinesis Data Analytics 中的陣列運算式:

  • 陣列運算式僅支援一個層級的解除參考。不支援下列運算式格式。

    $.arrayObject[0:].element[0:].subElement
  • 結構描述中只能展平一個陣列。可以參考多個陣列 — 傳回為包含陣列中所有元素的一列。但是,只有一個陣列可以將其中的每個元素作為單獨的列傳回。

    包含以下格式元素的結構描述是有效的。這種格式會傳回第二個陣列的內容作為單一欄,在第一個陣列中的每個元素重複。

    $.arrayObjectOne[0:].element $.arrayObjectTwo[0:]

    包含以下格式元素的結構描述是無效的。

    $.arrayObjectOne[0:].element $.arrayObjectTwo[0:].element

其他考量

使用 JSONPath 的其他注意事項如下:

  • 如果在應用程式結構描述中,JSONPath 運算式的個別元素沒有存取任何陣列,則會針對處理的每個 JSON 記錄,在應用程式的輸入串流中建立單一資料列。

  • 當陣列平面化 (即其元素會以個別資料列傳回) 時,任何遺失的元素都會導致應用程式內串流中出現 Null 值。

  • 陣列永遠會平面化到至少一列。如果不會傳回任何值 (也就是陣列為空或未查詢任何元素),則會傳回包含所有 Null 值的單一資料列。

    下列運算式會從前面的 JSON 範例傳回帶有 null 值的紀錄 ,因為指定的路徑沒有相符元素。

    $.orders[0:].itemId

    上述運算式會從前面的 JSON 範例記錄傳回下列項目。

    null

    null

    null

相關主題