当 属性 名称包含索引字符 [] 时如何使用 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.