ID.X是否是有效的JSON密钥 - 无法使用newtonsoft库解析它

时间:2015-09-08 06:53:11

标签: json json.net

我正在使用NewtonSoft来管理ResJson字符串。

我想从这个字符串中检索一个项目:

{
  "ID.1": "File and Menu",
  "ID_2": "Test Scenario"
}

var jtok = JObject.Parse(ResJsonText).SelectToken(pair.Key);

仅检索第二项。

我有最新的newtonsoft.json.dll版本。

ID有效吗? 我在jsonlint.com上对它进行了测试,并表示它是有效的。

1 个答案:

答案 0 :(得分:0)

是的,密钥有效,但您无法在.方法中使用SelectToken的密钥,因为.作为该方法的导航操作符具有特殊含义。在这种情况下,ID.1意味着"找到一个名为ID的属性,然后导航到其子对象并找到一个名为1的属性,然后获取其值。由于您的JSON中不存在该排列,因此您将获得空值。

相反,您可以使用方括号语法:

JObject obj = JObject.Parse(json);
JToken token = obj["ID.1"];

如果你在JObject(我怀疑你是)的键值对循环,那么你不需要使用键来获取值;你已经在对Value属性中拥有它们了:

string json = @"{ ""ID.1"": ""File and Menu"", ""ID_2"": ""Test Scenario"" }";

var jo = JObject.Parse(json);
foreach (var pair in jo)
{
    Console.WriteLine(pair.Key);
    Console.WriteLine(pair.Value));
}

小提琴:https://dotnetfiddle.net/fpcMGk