我有如下所示的 json:
myjson = {"queries":{"F.SP": 27}}
所以用
queryResults = JObject.Parse(jsonString)
我能做到
firstToken = queryResults.SelectToken("queries")
并拿回林克JToken
{"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("query[0]") 不返回任何内容, fwiw)
有什么想法吗?
编辑:我已经验证了嵌入的"."是问题所在;如果我将原始json更改为
{"queries":{"FSP": 27}}
我能做到
queryResults.SelectToken("queries").SelectToken("FSP")
没关系
如果 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
这不会返回令牌本身,但会返回值(这可能是您要查找的值)...
queryResults.SelectToken("queries").Value<int>("F.SP");
与其尝试使用 SelectToken,不如进行索引搜索?
subToken = queryResults["F.SP"];
JObject obj = JObject.Parse(jsonstring);
var fsp = obj["queries"].First().First();
不是最优雅的,但它得到了价值。