

在仔細考慮之後，我們決定停止 Amazon Kinesis Data Analytics for SQL 應用程式：

1. 從 **2025 年 9 月 1 日起，**我們不會為 Amazon Kinesis Data Analytics for SQL 應用程式提供任何錯誤修正，因為考慮到即將終止，我們將對其提供有限的支援。

2. 從 **2025 年 10 月 15 日起，**您將無法建立新的 Kinesis Data Analytics for SQL 應用程式。

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

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

# 使用 JSONPath
<a name="about-json-path"></a>

**注意**  
2023 年 9 月 12 日之後，如果尚未使用 Kinesis Data Analytics for SQL，您將無法使用 Kinesis Data Firehose 做為建立新應用程式的來源。如需詳細資訊，請參閱[限制](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html)。

JSONPath 是查詢 JSON 物件元素的標準化方式。JSONPath 使用路徑表達式導覽 JSON 文件中的元素、巢狀元素及陣列。如需 JSON 的詳細資訊，請參閱[介紹 JSON](http://www.json.org/)。

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

如需將串流資料映射至應用程式輸入串流的詳細資訊，請參閱 [將串流來源元素映射至 SQL 輸入資料欄](sch-mapping.md)。

## 使用 JSONPath 存取 JSON 元素
<a name="about-json-path-elements"></a>

接下來，你可以找到如何使用 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 元素
<a name="about-json-path-firstlevel"></a>

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

```
$.elementName
```

下列表達式會查詢上述 JSON 範例中的 `customerName` 元素。

```
$.customerName
```

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

```
John Doe
```

**注意**  
路徑表達式區分大小寫。表達式 `$.customername` 會從前面的 JSON 範例傳回 `null`。

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

```
$.customerId
```

### 存取巢狀 JSON 元素
<a name="about-json-path-nested"></a>

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

```
$.parentElement.element
```

下列表達式會查詢上述 JSON 範例中的 `city` 元素。

```
$.address.city
```

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

```
Anytown
```

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

```
$.parentElement.element.subElement
```

下列表達式會查詢上述 JSON 範例中的 `street` 元素。

```
$.address.streetAddress.street
```

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

```
AnyStreet
```

### 存取陣列
<a name="about-json-path-arrays"></a>

您可以通過以下方式存取 JSON 陣列中的資料：
+ 將陣列中的所有元素擷取為單一資料列。
+ 將陣列中的每個元素擷取為單獨的列。

#### 將陣列中的所有元素擷取為單一資料列。
<a name="about-json-path-arrays-row"></a>

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

```
$.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"}]
```

#### 將陣列中的所有元素擷取為單一資料列。
<a name="about-json-path-arrays-separate"></a>

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

```
$.arrayObject[0:].element
```

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

```
$.orders[0:].orderId
```

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


****  

|  | 
| --- |
|  23284  | 
|  63122  | 
|  77284  | 

**注意**  
如果查詢非陣列元素的表達式包含在查詢個別陣列元素的結構描述中，則會針對陣列中的每個元素重複非陣列元素。舉例來說，假設上述 JSON 範例的結構描述包含下列表達式：  
\$1.customerName
\$1.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
  ```

## 其他考量
<a name="about-json-path-other"></a>

使用 JSONPath 的其他注意事項如下：
+ 如果在應用程式結構描述中，JSONPath 表達式的個別元素沒有存取任何陣列，則會針對處理的每個 JSON 記錄，在應用程式的輸入串流中建立單一資料列。
+ 當陣列平面化 (即其元素會以個別資料列傳回) 時，任何遺失的元素都會導致應用程式內串流中出現 Null 值。
+ 陣列永遠會平面化到至少一列。如果不會傳回任何值 (也就是陣列為空或未查詢任何元素)，則會傳回包含所有 Null 值的單一資料列。

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

  ```
  $.orders[0:].itemId
  ```

  上述表達式會從前面的 JSON 範例記錄傳回下列項目。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kinesisanalytics/latest/dev/about-json-path.html)

## 相關主題
<a name="about-json-path.Related"></a>
+ [JSON 簡介](http://www.json.org/)