parse_json()

Interpreta um string como um valor JSON e devolve o valor como dynamic. Se possível, o valor é convertido em tipos de dados relevantes. Para análise rigorosa sem conversão de tipo de dados, utilize funções extract() ou extract_json( ).

É melhor utilizar a função parse_json() sobre a função extract_json() quando precisar de extrair mais do que um elemento de um objeto composto JSON. Utilize dynamic() sempre que possível.

Aliases preteridos: parsejson(), toobject(), todynamic()

Syntax

parse_json(json)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
json string ✔️ A cadeia na forma de um valor formatado em JSON ou um saco depropriedades dinâmico para analisar como JSON.

Devoluções

Um objeto do tipo dynamic que é determinado pelo valor de json:

  • Se json for do tipo dynamic, o respetivo valor é utilizado tal como está.
  • Se json for do tipo stringe for uma cadeia JSON devidamente formatada, a cadeia é analisada e o valor produzido é devolvido.
  • Se json for do tipo string, mas não for uma cadeia JSON corretamente formatada, o valor devolvido é um objeto do tipo dynamic que contém o valor original string .

Exemplo

No exemplo seguinte, quando context_custom_metrics é um string aspeto semelhante ao seguinte:

{"duration":{"value":118.0,"count":5.0,"min":100.0,"max":150.0,"stdDev":0.0,"sampledValue":118.0,"sum":118.0}}

em seguida, a consulta seguinte obtém o valor do duration bloco no objeto e, a partir daí, obtém dois blocos, duration.value e duration.min (118.0 e 110.0, respetivamente).

T
| extend d=parse_json(context_custom_metrics) 
| extend duration_value=d.duration.value, duration_min=d["duration"]["min"]

Notas

É comum ter uma cadeia JSON que descreva um saco de propriedades no qual uma das "ranhuras" é outra cadeia JSON.

Por exemplo:

let d='{"a":123, "b":"{\\"c\\":456}"}';
print d

Nestes casos, não só é necessário invocar parse_json duas vezes, mas também para garantir que na segunda chamada tostring é utilizada. Caso contrário, a segunda chamada para parse_json passará apenas a entrada para a saída tal como está, porque o tipo declarado é dynamic.

let d='{"a":123, "b":"{\\"c\\":456}"}';
print d_b_c=parse_json(tostring(parse_json(d).b)).c