如何使用 JSONPath(或任何其他选项)查询未命名的 JSON 数组?

How to use JSONPath (or any other option) to query an unnamed JSON array?

REST API 服务为我的 C# 代码提供了以下 JSON:

[
  {
    "contentUri": "https://somewhere.com/aGuid1",
    "contentId": "2"
  },
  {
    "contentUri": "https://somewhere.com/aGuid2",
    "contentId": "3"
  },
  {
    "contentUri": "https://somewhere.com/aGuid3",
    "contentId": "4"
  }
]

以上 JSON 被简化,实际响应是一个非常大的字符串 ,因此字符串操作将是昂贵的和内存密集型的。

问题是上面的JSON数组没有名字。所以我无法将它解析为 JArray,除非我操作 JSON 字符串并为其添加名称。我喜欢避免这种情况。

我可以完美地将上面的JSON解析成JToken。现在我喜欢使用 JToken.SelectToken and JSONPath

在 JToken 中查询

我尝试了很多JSON路径查询,但没有锁定,因为数组没有名称。

你可以很容易地将上面的json解析成JArray:

JArray array = JArray.Parse(jsonString);

要获取数组中的所有对象,不需要 JSONPath 表达式,只需遍历数组即可:

foreach (JObject child in array)
{
    Console.WriteLine("contentUri: " + (string)child["contentUri"]);
    Console.WriteLine("contentId: " + (string)child["contentId"]);
}

为了完整起见,获取所有数组值的等效 JSONPath 表达式是 [*]。但它在这里并没有真正给你买任何东西。

要仅获取所有 contentUri 值,您可以将 SelectTokens 与 JSONPath [*].contentUri:

一起使用
foreach (JToken uri in array.SelectTokens("[*].contentUri"))
{
    Console.WriteLine(uri);
}

或者,您可以 Select 他们这样:

foreach (string uri in array.Select(t => (string)t["contentUri"]))
{
    Console.WriteLine(uri);
}

Fiddle: https://dotnetfiddle.net/C2gIWX