У меня есть приложение U-SQL, которое работает в среде Azure Data Lake. Предполагается обработать файл, полный данных JSON, который выглядит так, за исключением того, что в реальной жизни это намного больше двух строк.JSONPath: Извлечь один dict с ключами и значениями
[
{"reports" : {"direction": "FWD", "drive": "STOPS", "frob_variable": 0}},
{"reports" : {"direction": "FWD", "drive": "CRANKS", "frob_variable": -3}}
]
В этом озере Данные работы, у меня есть следующие строки:
@json =
EXTRACT direction string, drive string, frob_variable int FROM @"/input/file.json"
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("reports");
Когда я сбросить содержимое этой @json
переменной в текстовый файл я получаю пустые значения: строки нулевой длины и ноль -значные целые числа. Я получаю правильное количество строк вывода, поэтому он должен быть итерированием по всем моим вводам.
Немного сотрясая исходный код на JsonExtractor
показывает, что мое указанное значение JsonPath («reports»), кажется, возвращает ключ «reports» со встроенным dict. Если я попробую значение JsonPath для «отчетов. *», Я получаю внедренные значения (например, { "FWD", "STOPS", 0 }
), но мне очень хотелось, чтобы ключи соответствовали им, поэтому SELECT direction, drive, frob_variable
вернет что-то полезное.
Короче говоря, я ищу способ вытащить ключи и значения из этого внутреннего dict. Таким образом, мой желаемый результат от EXTRACT
был бы строкой, чьи столбцы являются «направлением», «диском» и «frob_variable» и значения которых указаны в исходных данных. Кажется, должно быть решение JsonPath или простой обходной путь в U-SQL.
Aha! Это то, что я искал. Извлечение Json-массива! – catfood