Simple Log Service (SLS) ofrece funciones para extraer y convertir datos estructurados en formatos JSON, XML y Protobuf durante la transformación de datos.
Funciones
|
Categoría |
Función |
Descripción |
|
JSON |
Extrae o calcula valores de una expresión JSON mediante la sintaxis JMESPath. |
|
|
Analiza un valor y lo convierte en un objeto JSON. |
||
|
XML |
Convierte datos XML a JSON. |
json_select
Extrae o calcula valores de una expresión JSON mediante la sintaxis JMESPath.
-
Sintaxis
json_select(value, jmes, default=None, restrict=False) -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
value
String, JSON
Sí
La expresión JSON o el campo del que se extraerán los datos.
jmes
String
Sí
La expresión JMESPath que especifica el campo por extraer.
default
String
No
El valor alternativo si el campo especificado no existe. Valor predeterminado: None (no se devuelve ningún valor).
restrict
Bool
No
Indica si se habilita el modo restringido cuando el valor extraído no es un JSON válido. Valor predeterminado: False.
-
False: Ignora el error y continúa con la transformación. Devuelve el valor default.
-
True: Reporta un error, detiene la transformación y descarta el registro.
-
-
Respuesta
El valor extraído.
-
Ejemplos
-
Ejemplo 1: Extraer el valor del elemento name del campo content.
-
Registro sin procesar
content: {"name": "xiaoming", "age": 10} -
Regla de transformación
e_set("json_filter",json_select(v("content"), "name")) -
Resultado
content: {"name": "xiaoming", "age": 10} json_filter: xiaoming
-
-
Ejemplo 2: Extraer todos los valores del elemento name del campo content.
-
Registro sin procesar
content: {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10} -
Regla de transformación
e_set("json_filter", json_select(v("content"), "name[*]")) -
Resultado
content: {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10} json_filter: ["xiaoming", "xiaowang", "xiaoli"]
-
-
Ejemplo 3: Extraer el elemento name3. Si no existe, devolver el valor predeterminado.
-
Registro sin procesar
content: {"name": "xiaoming", "age": 10} -
Regla de transformación
e_set("json_filter", json_select(v("content"), "name3", default="None")) -
Resultado
content: {"name": "xiaoming", "age": 10} json_filter: None
-
-
Ejemplo 4: Extraer el elemento name-test (que contiene un guion) del campo content.
-
Registro sin procesar
content: {"name": {"name-test":"xiaoming"}, "age": 10} -
Regla de transformación
e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None)) -
Resultado
content: {"name": {"name-test":"xiaoming"}, "age": 10} json_filter: xiaoming
-
-
Ejemplo 5: Extraer el elemento name-test (que contiene un guion). Si no existe, no se devuelve ningún campo.
-
Registro sin procesar
content: {"name": {"name.test":"xiaoming"}, "age": 10} -
Regla de transformación
e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None)) -
Resultado
content: {"name": {"name-test":"xiaoming"}, "age": 10}
-
-
json_parse
Analiza un valor y lo convierte en un objeto JSON.
-
Sintaxis
json_parse(value, default=None, restrict=False) -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
value
String
Sí
El campo que se analizará para convertirlo en un objeto JSON.
default
String
No
El valor alternativo si el campo no existe. Valor predeterminado: None (no se devuelve ningún valor).
restrict
Bool
No
Indica si se habilita el modo restringido cuando el valor no es un JSON válido. Valor predeterminado: False.
-
False: Ignora el error y continúa con la transformación. Devuelve el valor default.
-
True: Reporta un error, detiene la transformación y descarta el registro.
-
-
Respuesta
El objeto JSON analizado.
-
Ejemplos
-
Ejemplo 1: Analizar el valor del campo content y convertirlo en un objeto JSON.
-
Registro sin procesar
content: {"abc": 123, "xyz": "test" } -
Regla de transformación
e_set("json", json_parse(v("content"))) -
Resultado
content: {"abc": 123, "xyz": "test" } json: {"abc": 123, "xyz": "test"}
-
-
Ejemplo 2: Analizar el campo content. Si el valor no es un JSON válido, devolver el valor predeterminado.
-
Registro sin procesar
content: this is not json -
Regla de transformación
e_set("json", json_parse(v("content"), default="FFF", restrict=False)) -
Resultado
content: this is not json json: FFF
-
-
xml_to_json
Convierte datos XML a JSON.
-
Sintaxis
xml_to_json(source) -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
source
String
Sí
El campo XML que se convertirá.
-
Respuesta
Los datos JSON convertidos.
-
Ejemplos
-
Registro sin procesar
str : <data><country name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data> -
Regla de transformación
e_set("str_json",xml_to_json(v("str"))) -
Resultado
str:<data><country name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data> str_json:{"data": {"country": [{"@name": "Liechtenstein", "rank": "1", "year": "2008", "gdppc": "141100", "neighbor": [{"@name": "Austria", "@direction": "E"}, {"@name": "Switzerland", "@direction": "W"}]}, {"@name": "Singapore", "rank": "4", "year": "2011", "gdppc": "59900", "neighbor": {"@name": "Malaysia", "@direction": "N"}}, {"@name": "Panama", "rank": "68", "year": "2011", "gdppc": "13600", "neighbor": [{"@name": "Costa Rica", "@direction": "W"}, {"@name": "Colombia", "@direction": "E"}]}]}}
-