

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Puede utilizar las extensiones siguientes de la sintaxis ANSI SQL para facilitar el trabajo con objetos JSON anidados.

Operador “.”

Este operador accede a los miembros de los objetos JSON incrustados y funciona de forma idéntica a ANSI SQL y. JavaScript Por ejemplo: 

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

selecciona el valor de la propiedad `bar` de la cosa `foo` de la carga del siguiente mensaje enviado al tema `topic/subtopic`.

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

Si el nombre de una propiedad JSON incluye un guion o caracteres numéricos, la notación “punto” no funcionará. En su lugar, debe utilizar la [función get](iot-sql-functions.md#iot-sql-function-get) para extraer el valor de la propiedad. 

 En este ejemplo, se envía el siguiente mensaje al tema `iot/rules`. 

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

Normalmente, el valor de `my-key` se identificaría como en esta consulta.

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

Sin embargo, dado que el nombre de la propiedad `my-key` contiene un guion y `item2` un carácter numérico, se debe utilizar la [función get](iot-sql-functions.md#iot-sql-function-get), tal como se muestra en la siguiente consulta.

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

 Operador `*`

Funciona igual que el comodín `*` en ANSI SQL. Solo se utiliza en la cláusula SELECT y crea un objeto JSON nuevo que contiene los datos del mensaje. Si la carga del mensaje no tiene el formato JSON, `*` devuelve toda la carga del mensaje como bytes sin procesar. Por ejemplo: 

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

**Aplicación de una función a un valor de atributo**  
A continuación, se muestra un ejemplo de carga JSON que podría publicar un dispositivo:

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

En el ejemplo siguiente se aplica una función a un valor de atributo de una carga JSON:

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

El resultado de esta consulta es el objeto JSON siguiente:

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