当前位置: 首页 > 面试题库 >

如何在C#中过滤JSON数组

闻人昊昊
2023-03-14
问题内容

我花了很多时间为我的问题找到解决方案。

在此示例中,我在SetNavRecords数组中有2条记录。第一个是 “ Artikelnummer”:“ 21700” ,第二个是
Artikelnummer”:“ 21701”

每个记录都有一个数组“ OfflineVerkaufspreis”。

对我来说重要的是“ OfflineVerkaufspreis”中的“ Location_Code”字段。我只需要一个已过滤位置代码的孔信息。

如何为一个位置代码选择数据,例如“ MH”?

我正在使用C#和Newtonsoft类进行JSON解析。

我已经用LINQ尝试了一些版本,但没有成功。

{ "SetNavRecords" : [ { "Artikelbeschreibung" : "Trikot \"Home\" 2012/2013",
    "Artikelbeschreibung2" : "weiß",
    "Artikelnummer" : "21700",
    "Artikelrabattgruppe" : "MERCH",
    "Gutschein" : false,
    "MwStProduktgruppe" : "VOLLNEU",
    "OfflineVerkaufspreis" : [ { "Allow_Line_Discount" : true,
          "Date" : "2014-05-16T00:00:00",
          "Item_No" : "21700",
          "Location_Code" : "BP",
          "Unit_Price" : 5.0
        },
        { "Allow_Line_Discount" : true,
          "Date" : "2014-05-16T00:00:00",
          "Item_No" : "21700",
          "Location_Code" : "MH",
          "Unit_Price" : 5.0
        },
        { "Allow_Line_Discount" : true,              
          "Date" : "2014-05-16T00:00:00",
          "Item_No" : "21700",
          "Location_Code" : "RY",
          "Unit_Price" : 5.0
        }
      ]
  },
  { "Artikelbeschreibung" : "Autogrammtrikot 2012/2013",
    "Artikelbeschreibung2" : "weiß",
    "Artikelnummer" : "21701",
    "Artikelrabattgruppe" : "MERCH",
    "Gutschein" : false,
    "MwStProduktgruppe" : "VOLLNEU",
    "OfflineVerkaufspreis" : [ { "Allow_Line_Discount" : false,
          "Date" : "2014-05-16T00:00:00",
          "Item_No" : "21701",
          "Location_Code" : "BP",
          "Unit_Price" : 69.99
        },
        { "Allow_Line_Discount" : false,
          "Date" : "2014-05-16T00:00:00",
          "Item_No" : "21701",
          "Location_Code" : "MH",
          "Unit_Price" : 69.99
        },
        { "Allow_Line_Discount" : false,
          "Date" : "2014-05-16T00:00:00",
          "Item_No" : "21701",
          "Location_Code" : "RY",
          "Unit_Price" : 69.99
        }
      ]
  }

] }

这是我的问题:

var tmpResult = JObject.Parse(File.ReadAllText(FileName));
var resultObject = tmpResult["SetNavRecords"]
      .Values("OfflineVerkaufspreis")
      .Values<JObject>()                                   
      .Where(n => n["Location_Code"].Value<string>() == "MH");

过滤器工作正常,但tmpResult中的数据不完整。我只在“ OfflineVerkaufspreis”中获得数据。我也需要根数据。

有人知道吗?

谢谢!


问题答案:

这感觉像是一项工作,通过将json序列化为对象,可以使工作变得容易一些。要将json反序列化为对象,可以使用:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(jsonString);

同样,您可以使用以下方法将对象转换回json:

string jsonString = JsonConvert.SerializeObject(RootObject);

基于问题中提供的json的对象结构如下:

public class OfflineVerkaufsprei
{
    public bool Allow_Line_Discount { get; set; }
    public string Date { get; set; }
    public string Item_No { get; set; }
    public string Location_Code { get; set; }
    public double Unit_Price { get; set; }
}

public class SetNavRecord
{
    public string Artikelbeschreibung { get; set; }
    public string Artikelbeschreibung2 { get; set; }
    public string Artikelnummer { get; set; }
    public string Artikelrabattgruppe { get; set; }
    public bool Gutschein { get; set; }
    public string MwStProduktgruppe { get; set; }
    public List<OfflineVerkaufsprei> OfflineVerkaufspreis { get; set; }
}

public class RootObject
{
    public List<SetNavRecord> SetNavRecords { get; set; }
}

然后,您可以通过说出以下内容轻松地遍历对象:

for each(SetNavRecord i in obj.SetNavRecords)
{
    // do something to the record
}


 类似资料:
  • 所以我有一个JSON url,里面有一些数据,比如名字、纬度和经度。然而,并不是每个对象都有经纬度,我只想显示具有经纬度的对象的名称。 带有lat和LNG的JSON示例对象:

  • 问题内容: 如何使用Javascript或jQuery过滤JSON数据? 这是我的JSON数据: JavaScript: 现在我只想要包含网站的名称和网站数据等于 “ yahoo” 问题答案: 这是您应该怎么做的方法:(适用于Google查找) 更好的 解决方案:(Salman’s) http://jsbin.com/yakubixi/4/edit

  • 问题内容: 如何过滤Java中的数组? 我有一系列对象,例如汽车: 类: 用: 现在我要过滤汽车阵列,只保留4门或更多: 我应该怎么做? 在使用Vector之前,请执行以下操作: 然后,我将使用Vector的大小创建一个新数组。然后,我将再次遍历向量并填充新数组。我知道这对于简单的事情来说是一个非常大的过程。 我正在使用J2ME。 问题答案: 编辑: 看到ArrayList不在J2ME中,但是基于

  • 问题内容: 基本上,我有一个名为的结构,主题包含,以及一个标志(有关说明,请参见下面的屏幕截图)。 在应用程序中,我想过滤数据,仅显示具有的主题。 这就是我想要做的: 但这是行不通的。我应该如何处理?在此先感谢您的帮助。 问题答案: 您那里有一些小错误。总体来说还算不错,但是结合起来它们将永远无法正常工作: 调用任何方法都将返回一个新对象 您需要先过滤其价值 您需要遍历结果 结合这些: 我们会定期

  • 如何通过子数组值筛选数组?在这个例子中,我有下面的API请求数组,并且希望只构建一个id为2的新数组,该数组具有name=Other name,因为我的过滤器被设置为Other name 是否有方法执行并填充新数组?

  • 我有一个如下的控制器, 我有另一个这样的控制器, 我的结果结构如下: 这扩展了结果类: 现在,我将要设置到结果字段中的模型是, 现在,对于上面提到的TestController,我想显示json响应中的所有字段,而在SecondTestController中,我想屏蔽(不显示)json响应中的age属性。在Spring我该如何实现这一点。非常感谢任何帮助!