Разбор 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 (такая таблица определена ниже для примера).

  1. Сначала вам нужно будет вызвать parsejson() в вашем столбце (если он уже не напечатан как dynamic а не как string, в этом случае вы можете пропустить этот шаг).
  2. Тогда вы можете получить доступ к Date свойство в вашем значении JSON и использовать todatetime() бросить это, чтобы напечатать datetime,
  3. После этого вы можете фильтровать по внешнему параметру (dateTimeLowerBound в приведенном ниже примере).
  4. Наконец - вы можете 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([столбец]))

Другие вопросы по тегам