Как использовать mvexpand в массиве пар ключ / значение json
В моей телеметрии appInsights есть пользовательское свойство, представляющее собой массив json пар ключ / значение. То, что я хочу сделать, это спроецировать эту пару ключ / значение, и кажется, что совместное использование parsejson и mvexpand - это то, как этого добиться; однако я, кажется, что-то упустил. Конечным результатом моего выражения является столбец с именем type, который является необработанным json. Попытка добавить любое свойство к выражению приводит к пустому столбцу.
JSON закодированное свойство
[{"type":"text/xml","count":1}]
AIQL
requests
| project customDimensions
| extend type=parsejson(customDimensions.['Media Types'])
| mvexpand bagexpansion=array type
Обновление 30.06.17
Чтобы ответить на вопрос EranG, вывод моего запроса при проецировании свойств в виде столбцов показан ниже.
2 ответа
У меня недавно была такая же проблема. Вероятно, ваша собственность уже типа dynamic
, но его динамика String
не массив. parsejson
не работает, потому что он конвертирует String
в dynamic
не динамический к другому динамическому. Чтобы обойти это, я предлагаю вам сначала преобразовать вашу собственность в String
а затем проанализировать его снова.
Пожалуйста, попробуйте следующий пример. Это может помочь вам, как это помогло мне:
requests
| project customDimensions
| extend type=parsejson(tostring(customDimensions.['Media Types']))
| mvexpand type
| project type.type, type.['count']
Какие mvexpand
делает, чтобы взять ваш массив и разбить его на строки, так что каждая строка будет иметь один элемент из массива. Если вы хотите разбить каждый элемент на столбцы, вам нужно попробовать что-то вроде:
requests
| project customDimensions
| extend type=parsejson(customDimensions.['Media Types'])
| mvexpand bagexpansion=array type
| project type = type.type, count_ = type["count"]