C# 在U-SQL中提取JSON行

C# 在U-SQL中提取JSON行,c#,json,u-sql,C#,Json,U Sql,我将数据存储为文件中每行的JSON对象。在U-SQL脚本中提取此信息的好方法是什么 我已经使用一个文本提取器(见下面的代码)实现了它,但是JSON对象变大了,字符串的大小限制达到了128KB。任何帮助都将不胜感激 样本数据: { "prop1": "abc", "prop2": "xyz" } { "prop1": "def", "prop2": "uvw" } U-SQL: //Read (JSON Lines) line by line @dataAsStrings = EXTRA

我将数据存储为文件中每行的JSON对象。在U-SQL脚本中提取此信息的好方法是什么

我已经使用一个文本提取器(见下面的代码)实现了它,但是JSON对象变大了,字符串的大小限制达到了128KB。任何帮助都将不胜感激

样本数据:

{ "prop1": "abc", "prop2": "xyz" }
{ "prop1": "def", "prop2": "uvw" }
U-SQL:

//Read (JSON Lines) line by line
@dataAsStrings =
    EXTRACT jsonObjStr string
    FROM @INPUT_FILE
    USING Extractors.Text(delimiter:'\n');

//Use the JsonTuple function to get the Json Token of the string so it can be parsed later with Json .NET functions
@jsonify = SELECT Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(jsonObjStr, "prop1", "prop2") AS rec FROM @dataAsStrings;

//Extract the fields from the Json object.
@json = SELECT 
            rec["prop1"] AS prop1,
            rec["prop2"] AS prop2
FROM @jsonify;

您可能应该编写自己的“混合”提取器,将面向行的提取与JSON提取处理相结合。

我知道答案是1年零4个月,但我希望这可以帮助其他用户

尝试以下查询:

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; 

@trial2 = 
    EXTRACT jsonString string FROM @"/<your-json-file>.json" USING Extractors.Tsv(quoting:false);

@cleanUp = SELECT jsonString FROM @trial2 WHERE (!jsonString.Contains("Part: h" ) AND jsonString!= "465}");

@jsonify = SELECT Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(jsonString) AS props FROM @cleanUp;

@columnized = SELECT 
        props["prop1"] AS prop1,
        props["prop2"] AS prop2
FROM @jsonify;

OUTPUT @columnized
TO @"/out.csv"
USING Outputters.Csv();
引用程序集[Newtonsoft.Json];
引用程序集[Microsoft.Analytics.Samples.Formats];
@trial2=
使用Extractors.Tsv(引号:false)从@/.json中提取jsonString字符串;
@cleanUp=从@trial2中选择jsonString,其中(!jsonString.Contains(“Part:h”)和jsonString!=“465}”);
@jsonify=从@cleanUp中选择Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(jsonString)作为道具;
@列化=选择
道具[“道具1”]作为道具1,
道具[“道具2”]作为道具2
来自@jsonify;
输出@列化
至@“/out.csv”
使用Outputters.Csv();

您可以查看详细信息。

是。在我的待办事项列表中也有向GitHub程序集添加这样一个版本的内容。你有可以共享的链接吗?已经添加了吗?对于行分隔的JSON,我当前使用的方法是。如果有一个更干净的选择,我会很兴奋。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-我按照评论的建议在答案中添加了代码。