我有一个类似[{}, {}, {}]
的json,即可以有多行,每行有多个属性 - 值对,每行保持固定。
@json =
EXTRACT MainId string, Details string
FROM @INPUT_FILE
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();
这给了我一个字符串json。
我不知道如何获得:row[3].property4
类似于某一行的属性值。使事情变得复杂的是,这些属性本身都被安排为{姓名:" XXX",价值:" YYY"}
@jsonnodes =
SELECT JsonApp.JsonFunctions.JsonTuple(@json, "event", "id") AS json_map
FROM @json;
现在,我尝试了上面的查询,但它没有用。
它给了我错误:
Rowset variable '@json' is not a scalar variable.
我怎样才能获得行属性对并将它们放在csv文件或表中?
感谢您的帮助。
JSON看起来像:
[{"MainId":"24201803","System":[{"Name":"event","Value":"S"},{"Name":"id","Value":""}],
"Details":[{"Name":"EventName","Value":"W"},{"Name":"previd","Value":"88"}],
"ttl":8640000}, ....Multiple Rows of the Same type as before....]
我想要的输出是:
表列= MainId | System.event | System.id | Details.EventName | Details.previd | TTL
表格的行'值将由具有相应属性值的行填充(如在json行中)。
答案 0 :(得分:1)
在我的小测试用例中找到了一个下面的解决方案 - 我同意{“Name:'XXX',Value:'YYY'}格式化使事情变得有点棘手,但你仍然可以在没有自定义提取器的情况下完成这项工作 - 只是很多嵌套的JSON。
基本上,您从System和Details JSON(在@parse_json中)中提取SQLArray,然后将它们拆分为较小的JSON元组(在@get_nested中),然后最终在@output中提取“Values”。见下面的代码。如果您有任何疑问,请与我联系!
CREATE ASSEMBLY [Microsoft.Analytics.Samples.Formats]
FROM @FormatsAssembly;
CREATE ASSEMBLY [Newtonsoft.Json]
FROM @JSONAssembly;
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
DECLARE @CommentsPath = "/JSONTest/rawJson.json";
@get_json =
EXTRACT
MainId int,
System string,
Details string,
ttl int
FROM @CommentsPath
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();
@parse_json =
SELECT MainId,
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(System).Values AS SystemJson,
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(Details).Values AS DetailsJson,
ttl
FROM @get_json;
@get_nested =
SELECT
MainId,
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(SystemJson[0]) AS SystemName,
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(SystemJson[1]) AS SystemId,
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(DetailsJson[0]) AS DetailsName,
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(DetailsJson[1]) AS DetailsPrevid,
ttl
FROM @parse_json;
@output =
SELECT MainId,
SystemName["Value"] AS SystemEvent,
SystemId["Value"] AS SystemId,
DetailsName["Value"] AS EventName,
DetailsPrevid["Value"] AS PrevId,
ttl
FROM @get_nested;
OUTPUT @output
TO @"/JSONTest/test1.csv"
USING Outputters.Csv(outputHeader : true);