在 C# 中动态寻址 JSON

Addressing JSON in C# dynamically

我想写一些 C# 允许客户端提供 JSON 字符串和查询字符串。然后查询字符串将用于寻址 JSON 对象中的值。

例如,如果我有这个 JSON:

{
  "head": "big",
  "fingers": [
    "one", "thumb",
    "two", "ring"
  ],
  "arm": {
    "elbow", "locked"
  }
}

这个查询字符串:

"fingers.two"

我想要 return 值 "ring"

这(或类似的东西)在 C# 中可行吗?

我试过使用 ExpandoObject class,但这不允许动态 runtime 检查:

var json = JsonConvert.DeserializeObject<ExpandoObject>(jsonStr);

据我所知,json 变量值的发现需要在代码时完成,而不是运行时,这意味着我无法动态找到要查询的值。

JSON路径这样做

假设如下JSON(修复了原文中的一些语法错误)

{
  "head": "big",
  "fingers": {
    "one":"thumb",
    "two":"ring"
  },
  "arm": {
    "elbow": "locked"
  }
}

和这个查询

MyJObjectOrToken.SelectToken("fingers.two")

您将得到以下输出:

[
    "ring"
]

然后使用 JSON.Net 方法将值提取为字符串并 return 将结果提供给您的用户应该很简单。

对JSON路径的支持内置于JSON.Net

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