2016-12-08 33 views
1

我有一個在Azure Data Lake環境中運行的U-SQL應用程序。它應該處理一個充滿JSON數據的文件,看起來像這樣,除了現實生活中的兩行以外。JSONPath:使用鍵和值提取單個字典

[ 
{"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」鍵。如果我嘗試使用「reports。*」的JsonPath值,我會得到嵌入的值(例如,{ "FWD", "STOPS", 0 }),但我確實希望密鑰與它們一起使用,因此SELECT direction, drive, frob_variable會返回一些有用的值。長話短說,我正在尋找一種方法來從該內部字典中取得鍵值的值。因此,我所期望的EXTRACT的輸出將是一個行集,其列是「方向」,「驅動器」和「frob_variable」,其值如源數據中所示。在U-SQL中似乎應該有一個JsonPath解決方案或一個簡單的解決方法。

回答

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

+0

啊哈見!這就是我一直在尋找的。 Json數組提取! – catfood