U-SQL ТОЛЬКО извлекает определенные данные из JSON
У меня есть файл JSON, который содержит массив объектов
{
[
{id:1, a:4},
{id:2, a:7},
{id:3, a:5},
{id:4, a:9}
]
}
Как я могу написать скрипт U-SQL, чтобы извлечь только первый объект {id:1, a:4}
Не удалось найти в документах сборки JSON, если JsonExtractor фактически принял в качестве аргумента строку JSONPath, но он принимает строку, а для чтения из других публикаций - строку, подобную JSONPath
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
USING Microsoft.Analytics.Samples.Formats.Json;
DECLARE @InputPath string = "filepath.json"
@RawData =
EXTRACT id int,
a int
FROM @InputPath
USING new JsonExtractor("$[:1]");
ПРИМЕЧАНИЕ. Эти объекты не являются реальными объектами. Мои требования, чтобы получить первый из массива. Нет возможности, где поле для сопоставления
2 ответа
Нашел ответ.
Оказывается, что JsonExtract действительно получает строковый параметр, который является JSONPath, но когда вы используете файл, подобный показанному, где первый элемент является безымянным массивом, он предполагает, что каждый объект - это отдельный JSON.
Здесь вы можете найти проблему, которая заявляет о проблеме
На мой взгляд, у вас есть 2 выхода:
Реализуйте свой собственный экстрактор, который обрабатывает этот случай.
или же
Восстановите ваш входной JSON, если можете, чтобы назвать массив.
{
data: [
{id:1, a:4},
{id:2, a:7},
{id:3, a:5},
{id:4, a:9},
]
}
а затем вы можете использовать JsonPath для извлечения определенной части JSON, как так
@RawData =
EXTRACT id int,
a int
FROM @InputPath
USING new JsonExtractor("$.data[0]");
Получение в результате id: 1, a:4
Если значение id всегда последовательное, начиная с 1, вы можете использовать предложение WHERE:
@RawData =
EXTRACT id int,
a int
FROM @InputPath
USING new USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();
@CleanData
SELECT id int,
a int
FROM @RawData
WHERE id == 1;