JSONPath:使用键和值

时间:2016-12-08 16:30:03

标签: json jsonpath azure-data-lake u-sql

我有一个在Azure Data Lake环境中运行的U-SQL应用程序。它应该处理一个充满JSON数据的文件,除非在现实生活中超过两行。

[
{"reports" : {"direction": "FWD", "drive": "STOPS", "frob_variable": 0}},
{"reports" : {"direction": "FWD", "drive": "CRANKS", "frob_variable": -3}}
]

在Data Lake的工作中,我有以下几行:

@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值("报告")似乎正在返回"报告"嵌入式字典的关键。如果我尝试JsonPath值"报告。*"我确实得到了嵌入的值(例如{ "FWD", "STOPS", 0 }),但我真的希望密钥与它们一起使用,以便SELECT direction, drive, frob_variable返回一些有用的东西。

长话短说,我正在寻找一种从内部字典中提取键值的方法。因此,EXTRACT的所需输出将是一个行集,其列为" direction"," drive"和" frob_variable"其值如源数据中所示。看起来应该有一个JsonPath解决方案或U-SQL中的简单解决方法。

1 个答案:

答案 0 :(得分:2)

@extract =
     EXTRACT 
         reports String
     FROM @"/input/file.json"
     USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();

@relation =
    SELECT
     Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(reports)
     AS report
    FROM @extract;

@fields =
    SELECT 
       report["direction"] AS direction,
       report["drive"] AS drive,
       Int32.Parse(report["frob_variable"]) AS frob
    FROM @relation;

另见U-SQL - Extract data from json-array