JSONPath:使用键和值提取单个字典

JSONPath: Extract single dict with keys and values

我有一个在 Azure Data Lake 环境中运行的 U-SQL 应用程序。它应该处理一个充满 JSON 数据的文件,看起来像这样,除了在现实生活中多于两行。

[
{"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") 似乎是 returning "reports" 键与嵌入式字典。如果我尝试 "reports.*" 的 JsonPath 值,我会得到嵌入值(例如,{ "FWD", "STOPS", 0 }),但我真的希望密钥与它们一起使用,所以 SELECT direction, drive, frob_variable 会 return有用的东西。

长话短说,我正在寻找一种方法来从该内部字典中提取键 值。因此,我希望 EXTRACT 的输出是一个行集,其列为 "direction"、"drive" 和 "frob_variable",其值如源数据中所示。似乎在 U-SQL.

中应该有一个 JsonPath 解决方案或一个简单的解决方法
@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