c# - 使用 Json.NET 选择特定对象(SelectToken)

标签 c# json.net jsonpath

我是 Json.NET 新手,尝试使用 SelectToken 函数。

我的测试 JSON:

{
  "Root": {
    "aNode": {
      "bNode": {
        "cNode": {
          "id": "myID1"
        }
      },
      "cNode": {
        "id": "myID2"
      },
      "dNode": {
        "cNode": [
          {
            "id": "myID3"
          },
          {
            "id": "myID4"
          }
        ]
      }
    },
    "cNode": {
      "id": "myID5"
    }
  }
}

现在,我尝试使用以下代码来获取特定对象:

JObject obj = JsonConvert.DeserializeObject<JObject>(jsonTxt);

//Not found
var myID1 = obj.SelectToken("..cNode[?(@.id=='myID1')]");

//Not found
var myID2 = obj.SelectToken("..cNode[?(@.id=='myID2')]");

//Found
var myID3 = obj.SelectToken("..cNode[?(@.id=='myID3')]");

//Found
var myID4 = obj.SelectToken("..cNode[?(@.id=='myID4')]");

//Not found
var myID5 = obj.SelectToken("..cNode[?(@.id=='myID5')]");

为什么我会得到这些(对我来说)奇怪的结果?

我认为在任何情况下我都应该获取具有特定 ID 的 cNode 对象,而不仅仅是 myID3myID4。这里出了什么问题?

最佳答案

我不确定你真正想要实现什么,但你可以使用 Linq 来获取 cNodes

var nodes = obj.Descendants()
                .OfType<JProperty>()
                .Where(p => p.Name == "id")
                .Select(p=>p.Parent)
                .ToList();

关于c# - 使用 Json.NET 选择特定对象(SelectToken),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014192/

相关文章:

c# - x 轴上带有多级标签的图表

c# - 如何简化这段代码?

c# - Web 应用程序中的 Newtonsoft.Json 6.0.0.0 和 12.0.0.0 与 Web Api、C# 发生冲突

json - ATLANTBH jmeter 组件 : JSON Path Assertion

c# - 尝试检测 iOS 手机是否处于静音状态时遇到问题?

c# - 结合 IdentityServer4 和 MVC 客户端

c# - 将字典键从 json 反序列化为 .net 中的枚举

json - 在 .net 4.5 标准序列化程序中定义时间跨度格式

多个不同路径的 JSONPath 联合

json - 使用 jsonpath 选择多个属性