

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# JSON 확장
<a name="iot-sql-json"></a>

다음과 같은 ANSI SQL 구문 확장을 사용하여 중첩된 JSON 객체 작업을 용이하게 할 수 있습니다.

'.' 연산자

이 연산자는 포함된 JSON 객체의 멤버에 액세스하고 ANSI SQL 및 JavaScript와 동일하게 기능합니다. 다음 예를 참조하세요.

```
SELECT foo.bar AS bar.baz FROM 'topic/subtopic'
```

`topic/subtopic` 주제로 전송된 다음 메시지 페이로드에서 `foo` 객체의 `bar` 속성 값을 선택합니다.

```
{
  "foo": {
    "bar": "RED",
    "bar1": "GREEN",
    "bar2": "BLUE"
  }
}
```

JSON 속성 이름에 하이픈 문자 또는 숫자 문자가 포함되어 있으면 '점' 표기법이 작동하지 않습니다. 대신, [가져오기 함수(get function)](iot-sql-functions.md#iot-sql-function-get)를 사용하여 속성 값을 추출할 수 있습니다.

 이 예에서 다음 메시지는 `iot/rules` 주제로 전송됩니다.

```
{
  "mydata": {
    "item2": {
      "0": {
        "my-key": "myValue"
      }
    }
  }
}
```

일반적으로, `my-key`의 값은 이 쿼리와 같이 식별됩니다.

```
SELECT * from iot/rules WHERE mydata.item2.0.my-key= "myValue"
```

그러나 속성 이름 `my-key`에는 하이픈이 있고 `item2`에는 숫자 문자가 포함되어 있으면 [가져 오기 함수(get function)](iot-sql-functions.md#iot-sql-function-get)는 다음 쿼리에서 보여 주는 대로 사용해야 합니다.

```
SELECT * from 'iot/rules' WHERE get(get(get(mydata,"item2"),"0"),"my-key") = "myValue"
```

 `*` 연산자

이 연산자는 ANSI SQL의 `*` 와일드카드와 동일하게 기능합니다. SELECT 절에서만 사용되며 메시지 데이터를 포함하는 새 JSON 객체를 생성합니다. 메시지 페이로드가 JSON 형식이 아닐 경우 `*`는 전체 메시지 페이로드를 원시 바이트로 반환합니다. 다음 예를 참조하세요.

```
SELECT * FROM 'topic/subtopic'
```

**속성 값에 함수 적용**  
다음 예는 디바이스가 게시할 수 있는 JSON 페이로드입니다.

```
{
    "deviceid" : "iot123",
    "temp" : 54.98,
    "humidity" : 32.43,
    "coords" : {
        "latitude" : 47.615694,
        "longitude" : -122.3359976
    }
}
```

다음 예제는 JSON 페이로드의 속성 값에 함수를 적용합니다.

```
SELECT temp, md5(deviceid) AS hashed_id FROM topic/#
```

이 쿼리의 결과는 다음 JSON 객체입니다.

```
{
   "temp": 54.98,
   "hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1"
}
```