Как использовать 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"]
Другие вопросы по тегам