当数组位于根目录时,如何 select JArray 中的数组元素?

How do I select an array element in a JArray when the array is on the root?

使用 JSON.NET,我想在 JSON 数组中搜索包含键值的元素并从该元素获取 ID。因此,对于下面的 JSON,我想搜索 Url == "https://www.google.com/" 并获取 ID.

的值
{
  [
    {
      "Url": "https://www.google.com/",
      "Type": "SEARCH",
      "ID": 1
    },
  .
  .
  .
    {
      "Url": "https://www.someurl.com/",
      "Type": "TYPE",
      "ID": 100
    }
  ]
}

JArray class 包含 SelectToken 方法,但这需要一个关键参数。 我可以使用带有 lambda 表示法的 JArray select 如上所述使用根元素之外的元素吗?

好吧,假设您有一个有效的 JSON 数组。您只需要申请即可。 JArray.Parse 然后基本的 linq 就可以了。

    var sourceJson = @"
        [
    {
      ""Url"": ""https://www.google.com/"",
      ""Type"": ""SEARCH"",
      ""ID"": 1
    }, 
    {
      ""Url"": ""https://www.someurl.com/"",
      ""Type"": ""TYPE"",
      ""ID"": 100
    }
  ]
  ";
        var parsed = JArray.Parse(sourceJson);
        var goog = parsed.FirstOrDefault(r => r["Url"].Value<string>() == "https://www.google.com/");
        goog.ToString().Dump();

Fiddle

首先通过删除多余的“{ }”

来修复您的 json
var json="{[{... your json ";
json= json.Substring(1,json.Length-2);

您可以使用 2 种方式进行搜索

1.Deserialize json

var items= JsonConvert.DeserializeObject<List<Item>>(json);

var itemId=items.FirstOrDefault(i => i.Url== @"https://www.google.com/" ).ID;
  1. 解析json
var jItems=JArray.Parse(json);
var jItemId=jItems.FirstOrDefault(i => (string) i["Url"]== @"https://www.google.com/" )["ID"];

类 反序列化

public class Item
{
    public string Url { get; set; }
    public string Type { get; set; }
    public int ID { get; set; }
}