我试图检查在json中是否存在某种属性。实际上我可以通过以下方式实现:
var container = (JContainer)JsonConvert.DeserializeObject(responseText);
var x = container.ToString(Formatting.None);
var message = container["text"];
现在变量responseText
返回为:
{[
{
"trace": {
"details": {
"data": "[29-02-2016 17:37:32.931751]",
"type": "[info]",
"text": "[Done.]"
},
"context": {
"context": [
[
{
"ID": "John Dillinger"
}
]
]
}
}
}
]}
在x
变量中我删除了空格,最终结果为:
"[{\"trace\":{\"details\":{\"data\":\"[29-02-2016 17:37:32.931751]\",\"type\":\"[info]\",\"text\":\"[Done.]\"},\"context\":{\"context\":[[{\"ID\":\"John Dillinger\"}]]}}}]"
现在,如果找不到密钥,我会得到null
:
if (message == null)
{
return responseText;
}
问题是我在message
变量上执行条件,检查在container
(未格式化)中是否存在属性,问题是我得到了这个异常:
{"使用无效键值访问JArray值:\" text \"。期望Int32数组索引。"}
但是如果我用第二个带有斜线的json替换container
一切正常。现在我的问题是我无法执行var message= x["text"];
因为x
是一个字符串。那么如何删除json中的空格并检查是否包含text
键?
答案 0 :(得分:1)
看起来当您删除空格时,您也更改了第一个括号的顺序在第一个示例中,您的第一个括号为{[
,第二个括号为[{
在json中,排序有所不同。 {}
表示对象,[]
表示数组。
[{"data":"value"}]
是合法的,因为你说你有一个对象数组。 {["value"]}
不合法,因为您的对象没有数组的名称。合法版本为{ "data":["value"] }
Here是一个方便的网络工具,用于验证您的JSON语法