首页 > 解决方案 > 在 C# 中动态寻址 JSON

问题描述

我希望编写一些允许客户端提供 JSON 字符串和查询字符串的 C#。然后,查询字符串将用于处理 JSON 对象中的值。

例如,如果我有这个 JSON:

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

这个查询字符串:

"fingers.two"

我想返回值"ring"

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

我曾尝试使用ExpandoObject该类,但这不允许动态运行时检查:

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

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

标签: c#jsondynamicexpandoobject

解决方案


JSONPath 这样做

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

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

而这个查询

MyJObjectOrToken.SelectToken("fingers.two")

您将获得以下输出:

[
    "ring"
]

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

JSONPath 支持内置于 JSON.Net

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


推荐阅读