8

我有看起来像这样的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

4 回答 4

5

如果您在 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

于 2016-06-29T10:44:39.657 回答
4

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

queryResults.SelectToken("queries").Value<int>("F.SP");
于 2013-06-07T05:18:05.100 回答
1

与其尝试使用 SelectToken,不如使用索引搜索?

subToken = queryResults["F.SP"];
于 2013-11-13T02:05:18.100 回答
0
JObject obj = JObject.Parse(jsonstring);
var fsp = obj["queries"].First().First();

不是最优雅的,但它得到了价值。

于 2012-04-28T12:15:29.657 回答