带有嵌入式"."的json.net SelectToken

dav*_*vej 7 json.net

我有json看起来像:

myjson = {"queries":{"F.SP": 27}}
Run Code Online (Sandbox Code Playgroud)

所以

queryResults = JObject.Parse(jsonString)
Run Code Online (Sandbox Code Playgroud)

我可以

firstToken = queryResults.SelectToken("queries") 
Run Code Online (Sandbox Code Playgroud)

然后回到LinqJToken

{"F.SP": 27}
Run Code Online (Sandbox Code Playgroud)

但我被困住了,因为当我尝试的时候

subToken = firstToken.SelectToken("F.SP")
Run Code Online (Sandbox Code Playgroud)

我什么都没得到.我猜这是因为JSON.net正在寻找带有子词"SP"的令牌"F".

我也尝试过以下各项,但都无济于事

myToken = queryResults.SelectToken("queries.F.SP")     
myToken = queryResults.SelectToken("queries[0].F.SP")     
Run Code Online (Sandbox Code Playgroud)

(queryResults.SelectToken("queries [0]")什么都不返回,fwiw)

有任何想法吗?

编辑:我已经验证了嵌入式"." 是问题; 如果我将原来的json改为

{"queries":{"FSP": 27}}
Run Code Online (Sandbox Code Playgroud)

我可以

queryResults.SelectToken("queries").SelectToken("FSP")
Run Code Online (Sandbox Code Playgroud)

没问题

Ant*_*ton 5

如果您在 JSON 字段中有这样的名称:

{"queries":{"F.SP": 27}}
Run Code Online (Sandbox Code Playgroud)

您可以使用 SelectToken 转义:

queryResults.SelectToken("queries").SelectToken("['F.SP']")
Run Code Online (Sandbox Code Playgroud)

或者

queryResults.SelectToken("queries.['F.SP']")
Run Code Online (Sandbox Code Playgroud)

以下是更多转义示例:http : //www.newtonsoft.com/json/help/html/QueryJsonSelectTokenEscaped.htm


Eri*_*ter 4

这不会返回令牌本身,但会返回值(这可能就是您正在寻找的值)...

queryResults.SelectToken("queries").Value<int>("F.SP");
Run Code Online (Sandbox Code Playgroud)