

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

È possibile usare le estensioni seguenti nella sintassi SQL ANSI per semplificare l'uso degli oggetti JSON nidificati.

Operatore "."

Questo operatore accede ai membri degli oggetti e delle funzioni JSON incorporati in modo identico a ANSI SQL e. JavaScript Esempio: 

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

seleziona il valore della proprietà `bar` nell’oggetto `foo` dal seguente payload del messaggio inviato all'argomento `topic/subtopic`.

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

Se il nome di una proprietà JSON include caratteri quali il trattino o caratteri numerici, la notazione "punto" non funzionerà. Invece, devi utilizzare [get function](iot-sql-functions.md#iot-sql-function-get) per estrarre il valore della proprietà. 

 In questo esempio viene inviato il seguente messaggio all'argomento `iot/rules`. 

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

Normalmente, il valore di `my-key` verrebbe identificato come in questa query.

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

Tuttavia, poiché il nome della proprietà `my-key` contiene un trattino e `item2` contiene un carattere numerico, [get function](iot-sql-functions.md#iot-sql-function-get) deve essere utilizzato come mostra la seguente query.

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

Operatore `*`

Funziona nello stesso modo del carattere jolly `*` in SQL ANSI. Viene usato solo nella clausola SELECT e crea un nuovo oggetto JSON contenente i dati del messaggio. Se il payload del messaggio non è in formato JSON, `*` restituisce l'intero payload del messaggio come byte non elaborati. Ad esempio: 

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

**Applicazione di un funzione a un valore di attributo**  
Di seguito è illustrato un esempio di payload JSON che potrebbe essere pubblicato da un dispositivo:

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

L'esempio seguente applica una funzione a un valore di attributo in un payload JSON:

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

Il risultato di questa query è l'oggetto JSON seguente:

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