Разбор json в запросе kusto
Как я могу извлечь отдельные значения из JSON с помощью запроса KUSTO.
Я хочу иметь возможность прочитать значение для SourceSystemId, сообщения и спроектировать эти значения. Я также хочу использовать дату в следующем JSON в качестве фильтра. И проецируйте только те записи, где дата больше, чем дата, указанная в качестве внешнего параметра.
{{
"Status": 2,
"SourceSystemId": "4",
"RequisitionId": null,
"Errors": [
{
"Code": "8002",
"Message": "some message",
"FieldName": "VendorNumber",
"PartNumber": null
},
{
"Code": "8003",
"Message": "",
"FieldName": "PartNumber",
"PartNumber": ""
}
],
"SuppName": "SomeSupp",
"Date":"22/2/2017"
}}
3 ответа
Давайте предположим, что у вас есть таблица с именем T
с именем столбца MyString
, который хранит ваши значения JSON и набирается как string
(такая таблица определена ниже для примера).
- Сначала вам нужно будет вызвать
parsejson()
в вашем столбце (если он уже не напечатан какdynamic
а не какstring
, в этом случае вы можете пропустить этот шаг). - Тогда вы можете получить доступ к
Date
свойство в вашем значении JSON и использоватьtodatetime()
бросить это, чтобы напечататьdatetime
, - После этого вы можете фильтровать по внешнему параметру (
dateTimeLowerBound
в приведенном ниже примере). - Наконец - вы можете
project
соответствующие свойства, которые вас интересуют (Message
находится в первом элементе вErrors
массив иSourceSystemId
), и вы можете привести их к ожидаемым типам (например,long
а такжеstring
с помощьюtolong()
а такжеtostring()
соответственно).
Вот пример:
let dateTimeLowerBound = datetime(2017-01-21);
let T = datatable(MyString:string) // this table is just for the example
[
'{"Status": 2, "SourceSystemId": "4", "RequisitionId": null, "Errors": [ { "Code": "8002", "Message": "some message", "FieldName": "VendorNumber", "PartNumber": null }, { "Code": "8003", "Message": "", "FieldName": "PartNumber", "PartNumber": "" } ], "SuppName": "SomeSupp", "Date":"2017-02-22"}'
];
T
| project MyJson = parsejson(MyString)
| where todatetime(MyJson.Date) > dateTimeLowerBound
| project SourceSystemId = tolong(MyJson.SourceSystemId), Message = tostring(MyJson.Errors[0].Message)
Выходные данные этого примера должны быть таблицей с 2 столбцами с именем SourceSystemId
а также Message
из типов long
а также string
и со значениями 4
some message
соответственно.
Это просто, когда вы хотите проанализировать JSON, который находится в столбце, и хотите иметь предложение where в свойствах JSON -
tablename
| extend prop= parse_json(jsonColumn)
| where prop.description == 'My Description'
| sort by nameCoumn desc | take 1
Попробуйте | расширить Status = extractjson("$.", ToString([столбец]))