gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:39 25 4
gpt4 key购买 nike

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 Array 没有名字。所以我无法将它解析为 JArray,除非我操作 JSON 字符串并为其添加名称。我喜欢避免这种情况。

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

  • 什么 JSONPath 返回上述 JSON 数组中的所有元素?

  • 什么 JSONPath 返回上述 JSON 数组中的所有 contentUri 值?

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

最佳答案

你可以很容易地将上面的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);
}

或者,您可以像这样选择它们:

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

fiddle :https://dotnetfiddle.net/C2gIWX

关于c# - 如何使用 JSONPath(或任何其他选项)查询未命名的 JSON 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43234775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com