我有一个JSON文件,其中包含一个对象数组
{
[
{id:1, a:4},
{id:2, a:7},
{id:3, a:5},
{id:4, a:9}
]
}
如何编写U-SQL脚本以仅提取第一个对象{id:1, a:4}
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]");
注意:此对象不是真实对象。我的要求是获得阵列的第一个。没有可能匹配的字段
答案 0 :(得分:2)
找到答案。
当你使用如图所示的文件时,JsonExtract会收到一个字符串参数,它是一个JSONPath,但是,其中第一个元素是一个未命名的数组,它假定每个对象都是不同的JSON。
在这里,您可以找到陈述问题的issue
就我而言,你有 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
答案 1 :(得分:0)
如果值'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;