C# U-SQL仅从JSON提取特定数据

C# U-SQL仅从JSON提取特定数据,c#,json,u-sql,jsonparser,C#,Json,U Sql,Jsonparser,我有一个JSON文件,其中包含一个对象数组 { [ {id:1, a:4}, {id:2, a:7}, {id:3, a:5}, {id:4, a:9} ] } 如何编写一个U-SQL脚本来只提取第一个对象{id:1,a:4} 在JSON程序集的文档中找不到JsonExtractor是否实际使用了一个JSONPath字符串作为参数,但它确实使用了一个字符串,而对于其他文章中读取的内容,它是一个类似于JSONPath的字符串 注意:此对象不是真实

我有一个JSON文件,其中包含一个对象数组

{
  [ 
    {id:1, a:4},
    {id:2, a:7},
    {id:3, a:5},
    {id:4, a:9}
  ]    
}
如何编写一个U-SQL脚本来只提取第一个对象
{id:1,a:4}

在JSON程序集的文档中找不到JsonExtractor是否实际使用了一个JSONPath字符串作为参数,但它确实使用了一个字符串,而对于其他文章中读取的内容,它是一个类似于JSONPath的字符串


注意:此对象不是真实对象。我的要求是获得阵列的第一个。如果值“id”始终从1开始按顺序排列,则不可能匹配where字段,您可以使用where子句:

@RawData = 
    EXTRACT id     int,
            a      int
    FROM @InputPath
    USING new USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();

@CleanData
    SELECT  id    int,
            a     int
    FROM @RawData
    WHERE id == 1;

如果值“id”总是从1开始按顺序排列,则可以使用WHERE子句:

@RawData = 
    EXTRACT id     int,
            a      int
    FROM @InputPath
    USING new USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();

@CleanData
    SELECT  id    int,
            a     int
    FROM @RawData
    WHERE id == 1;
找到了答案

结果表明,JsonExtract确实接收到一个字符串参数,它是一个JSONPath,但是当您使用如图所示的文件时,其中第一个元素是一个未命名的数组,它假设每个对象都是不同的JSON

在这里,您可以找到说明问题的


就我而言,你有两条出路:

实现您自己的提取器来处理这种情况

如果可以,重建输入JSON,以便命名数组

{
  data: [ 
    {id:1, a:4},
    {id:2, a:7},
    {id:3, a:5},
    {id:4, a:9},
  ]
}
然后可以使用JsonPath提取json的特定部分,如下所示

@RawData = 
  EXTRACT id     int,
          a      int
  FROM @InputPath
  USING new JsonExtractor("$.data[0]");
作为结果获取id:1,a:4找到了答案

结果表明,JsonExtract确实接收到一个字符串参数,它是一个JSONPath,但是当您使用如图所示的文件时,其中第一个元素是一个未命名的数组,它假设每个对象都是不同的JSON

在这里,您可以找到说明问题的


就我而言,你有两条出路:

实现您自己的提取器来处理这种情况

如果可以,重建输入JSON,以便命名数组

{
  data: [ 
    {id:1, a:4},
    {id:2, a:7},
    {id:3, a:5},
    {id:4, a:9},
  ]
}
然后可以使用JsonPath提取json的特定部分,如下所示

@RawData = 
  EXTRACT id     int,
          a      int
  FROM @InputPath
  USING new JsonExtractor("$.data[0]");

得到结果
id:1,a:4

我需要提取,没有满足我需要的where类,我只需要阵列上的第一个I需要提取,没有满足我需要的where类,我只需要阵列上的第一个