带有嵌入式“。”的json.net SelectToken

时间:2012-04-25 15:37:08

标签: json.net

我的json看起来像:

myjson = {"queries":{"F.SP": 27}}

所以

queryResults = JObject.Parse(jsonString)

我能做到

firstToken = queryResults.SelectToken("queries") 

并取回LinqJToken

{"F.SP": 27}

但是我被卡住了,因为当我尝试

subToken = firstToken.SelectToken("F.SP")

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

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

myToken = queryResults.SelectToken("queries.F.SP")     
myToken = queryResults.SelectToken("queries[0].F.SP")     

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

有什么想法吗?

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

{"queries":{"FSP": 27}}

我能做到

queryResults.SelectToken("queries").SelectToken("FSP")

没问题

4 个答案:

答案 0 :(得分:3)

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

queryResults.SelectToken("queries").Value<int>("F.SP");

答案 1 :(得分:3)

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

{"queries":{"F.SP": 27}}

您可以使用SelectToken转义:

queryResults.SelectToken("queries").SelectToken("['F.SP']")

queryResults.SelectToken("queries.['F.SP']")

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

答案 2 :(得分:1)

而不是尝试使用SelectToken,索引搜索怎么样?

subToken = queryResults["F.SP"];

答案 3 :(得分:0)

JObject obj = JObject.Parse(jsonstring);
var fsp = obj["queries"].First().First();

不是最优雅但却有价值。