当 属性 名称包含索引字符 [] 时如何使用 SelectToken()
How to use SelectToken() when a property name contains indexer characters []
试图编辑一个 JSON 对象,我必须到达一个特定的节点。
我正在使用类似的东西:
root.SelectToken("dot.delimited.path.to.node")
它工作正常,直到节点有一个 属性 名称,如 "vectorOne[1]"
。
有没有办法 'escape' SelectToken() 中的 [] 字符?如果没有-有人可以提供建议吗?
如 original JSONPath proposal 中所述,您可以使用方括号表示法和点表示法按名称访问属性:
JSONPath expressions can use the dot–notation
$.store.book[0].title
or the bracket–notation
$['store']['book'][0]['title']
因此,使用 SelectToken()
,您可以通过 ['vectorOne[1]']
访问名为 "vectorOne[1]"
的 属性。例如,如果您的 JSON 看起来像:
{
"data": {
"vectorOne[1]": {
"value": 1
}
}
}
然后
root.SelectToken("data['vectorOne[1]'].value")
请问select值1
.
备注:
如果 属性 名称包含 single-quote 字符,可以使用 \
进行转义,例如如果你有以下 JSON:
{
"single-quote-'": "value"
}
然后您可以使用以下路径 select "single-quote-'"
:
root.SelectToken(@"['single-quote-\'']");
(注意不要将在编译时评估的 c# 字符串转义与在运行时评估的 JSONPath 字符串转义混淆。)
如果您不确定用于任何特定值的路径,您可以使用 JContainer.DescendantsAndSelf()
and print their paths via JToken.Path
:
遍历 JObject
的所有后代
foreach (var item in root.DescendantsAndSelf())
Console.WriteLine(item.Path);
另请参阅文档页面 Querying JSON with JSON Path and escaped properties。
演示 fiddle here.
试图编辑一个 JSON 对象,我必须到达一个特定的节点。 我正在使用类似的东西:
root.SelectToken("dot.delimited.path.to.node")
它工作正常,直到节点有一个 属性 名称,如 "vectorOne[1]"
。
有没有办法 'escape' SelectToken() 中的 [] 字符?如果没有-有人可以提供建议吗?
如 original JSONPath proposal 中所述,您可以使用方括号表示法和点表示法按名称访问属性:
JSONPath expressions can use the dot–notation
$.store.book[0].title
or the bracket–notation
$['store']['book'][0]['title']
因此,使用 SelectToken()
,您可以通过 ['vectorOne[1]']
访问名为 "vectorOne[1]"
的 属性。例如,如果您的 JSON 看起来像:
{
"data": {
"vectorOne[1]": {
"value": 1
}
}
}
然后
root.SelectToken("data['vectorOne[1]'].value")
请问select值1
.
备注:
如果 属性 名称包含 single-quote 字符,可以使用
\
进行转义,例如如果你有以下 JSON:{ "single-quote-'": "value" }
然后您可以使用以下路径 select
"single-quote-'"
:root.SelectToken(@"['single-quote-\'']");
(注意不要将在编译时评估的 c# 字符串转义与在运行时评估的 JSONPath 字符串转义混淆。)
如果您不确定用于任何特定值的路径,您可以使用
遍历JContainer.DescendantsAndSelf()
and print their paths viaJToken.Path
:JObject
的所有后代foreach (var item in root.DescendantsAndSelf()) Console.WriteLine(item.Path);
另请参阅文档页面 Querying JSON with JSON Path and escaped properties。
演示 fiddle here.