在 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
我想写一些 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