O Simple Log Service (SLS) oferece funções para extrair e converter dados estruturados em JSON, XML e Protobuf durante a transformação de dados.
Funções
|
Categoria |
Função |
Descrição |
|
JSON |
Extrai ou calcula valores de uma expressão JSON com a sintaxe JMESPath. |
|
|
Analisa um valor e o converte em um objeto JSON. |
||
|
XML |
Converte dados XML para JSON. |
json_select
Extrai ou calcula valores de uma expressão JSON com a sintaxe JMESPath.
-
Sintaxe
json_select(value, jmes, default=None, restrict=False) -
Parâmetros
Parâmetro
Tipo
Obrigatório
Descrição
value
String, JSON
Sim
Expressão JSON ou campo de origem da extração.
jmes
String
Sim
Expressão JMESPath que especifica o campo a extrair.
default
String
Não
Valor alternativo caso o campo especificado não exista. Padrão: None (nenhum valor retornado).
restrict
Bool
Não
Indica se o modo restrito deve ser ativado quando o valor extraído não for um JSON válido. Padrão: False.
-
False: Ignora o erro e continua a transformação. Retorna o valor default.
-
True: Reporta um erro, interrompe a transformação e descarta o log.
-
-
Resposta
O valor extraído.
-
Exemplos
-
Exemplo 1: Extrair o valor do elemento name do campo content.
-
Log bruto
content: {"name": "xiaoming", "age": 10} -
Regra de transformação
e_set("json_filter",json_select(v("content"), "name")) -
Resultado
content: {"name": "xiaoming", "age": 10} json_filter: xiaoming
-
-
Exemplo 2: Extrair todos os valores do elemento name do campo content.
-
Log bruto
content: {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10} -
Regra de transformação
e_set("json_filter", json_select(v("content"), "name[*]")) -
Resultado
content: {"name": ["xiaoming", "xiaowang", "xiaoli"], "age": 10} json_filter: ["xiaoming", "xiaowang", "xiaoli"]
-
-
Exemplo 3: Extrair o elemento name3. Caso não exista, retornar o valor padrão.
-
Log bruto
content: {"name": "xiaoming", "age": 10} -
Regra de transformação
e_set("json_filter", json_select(v("content"), "name3", default="None")) -
Resultado
content: {"name": "xiaoming", "age": 10} json_filter: None
-
-
Exemplo 4: Extrair o elemento name-test (contém hífen) do campo content.
-
Log bruto
content: {"name": {"name-test":"xiaoming"}, "age": 10} -
Regra de transformação
e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None)) -
Resultado
content: {"name": {"name-test":"xiaoming"}, "age": 10} json_filter: xiaoming
-
-
Exemplo 5: Extrair o elemento name-test (contém hífen). Se não existir, nenhum campo será retornado.
-
Log bruto
content: {"name": {"name.test":"xiaoming"}, "age": 10} -
Regra de transformação
e_set("json_filter", json_select(v("content"), 'name."name-test"', default=None)) -
Resultado
content: {"name": {"name-test":"xiaoming"}, "age": 10}
-
-
json_parse
Analisa um valor e o converte em um objeto JSON.
-
Sintaxe
json_parse(value, default=None, restrict=False) -
Parâmetros
Parâmetro
Tipo
Obrigatório
Descrição
value
String
Sim
Campo a analisar e converter em um objeto JSON.
default
String
Não
Valor alternativo caso o campo não exista. Padrão: None (nenhum valor retornado).
restrict
Bool
Não
Indica se o modo restrito deve ser ativado quando o valor não for um JSON válido. Padrão: False.
-
False: Ignora o erro e continua a transformação. Retorna o valor default.
-
True: Reporta um erro, interrompe a transformação e descarta o log.
-
-
Resposta
O objeto JSON analisado.
-
Exemplos
-
Exemplo 1: Analisar o valor do campo content e convertê-lo em um objeto JSON.
-
Log bruto
content: {"abc": 123, "xyz": "test" } -
Regra de transformação
e_set("json", json_parse(v("content"))) -
Resultado
content: {"abc": 123, "xyz": "test" } json: {"abc": 123, "xyz": "test"}
-
-
Exemplo 2: Analisar o campo content. Se o valor não for um JSON válido, retornar o valor padrão.
-
Log bruto
content: this is not json -
Regra de transformação
e_set("json", json_parse(v("content"), default="FFF", restrict=False)) -
Resultado
content: this is not json json: FFF
-
-
xml_to_json
Converte dados XML para JSON.
-
Sintaxe
xml_to_json(source) -
Parâmetros
Parâmetro
Tipo
Obrigatório
Descrição
source
String
Sim
Campo XML a converter.
-
Resposta
Os dados JSON convertidos.
-
Exemplos
-
Log bruto
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> -
Regra de transformação
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"}]}]}}
-