【问题标题】:Filter JSON Objects based on field using LINQ [duplicate]使用 LINQ 基于字段过滤 JSON 对象 [重复]
【发布时间】:2019-11-29 06:21:53
【问题描述】:

我有一组包含联系人详细信息的 JSON 对象,当它为真时,我必须根据字段过滤它们。

这是样本数据

{ 
    "9002":{
        "Contacts": [
            {
                "Source": 0,
                "Id": 0,
                "Details": {
                    "Harlson": "9015",
                    "adssd": "9022",
                    "First Name": "Gary",
                    "Last Name": "Harlson"
                },
                "Pinned": true
            }
        ]
    }
}

我想使用 LINQ 查询根据When Pinned 变为 true 过滤所有详细信息。

【问题讨论】:

  • 那是无效的json...
  • 你试过了吗?

标签: c# .net json linq


【解决方案1】:

您可以反序列化 Json(使用 NewtonSoft Json)并使用 Linq 使用 Pinned=True 查询项目

var rootInstance = JsonConvert.DeserializeObject<RootObject>(json);
var result = rootInstance.Id.Contacts.Where(x=>x.Pinned);

类被定义为

public class Details
{
    [JsonProperty("Harlson")]
    public string Harlson { get; set; }
    [JsonProperty("adssd")]
    public string adssd { get; set; }
    [JsonProperty("First Name")]
    public string FirstName { get; set; }
    [JsonProperty("Last Name")]
    public string LastName { get; set; }
}

public class Contact
{
    public int Source { get; set; }
    public int Id { get; set; }
    public Details Details { get; set; }
    public bool Pinned { get; set; }
}

public class Id
{
    public List<Contact> Contacts { get; set; }
}

public class RootObject
{
    [JsonProperty("9002")]
    public Id Id { get; set; }
}

【讨论】:

  • 这很好,所以访问 OP 可以使用类似 var jsonString = File.ReadAllText(jsonPath); var jsonObject = JsonConvert.DeserializeObject&lt;RootObject&gt;(jsonString); var contacts = jsonObject.Id.Contacts.ToList(); foreach (var item in contacts) { if (item.Pinned) { //Filter Details var filterDetails = item.Details; Console.WriteLine(item.Details.LastName); } }
【解决方案2】:

你可以通过使用 JSON 和 LINQ 来解决它:

var myObjects = JArray.Parse(json)
    .OfType<JObject>()
    .Where(j => j.Properties().First().Value["Contacts"].Any(t => (bool)t["Pinned"] == true))
    .ToList();

这完全取决于您应该如何处理数据。我个人会同意 Anu Viswan 的回答,但如果您只需要一小部分数据,这可能是一个可行的解决方案。

https://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多