Json带着空间返回

时间:2016-02-29 17:10:58

标签: c# json

我试图检查在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键?

1 个答案:

答案 0 :(得分:1)

看起来当您删除空格时,您也更改了第一个括号的顺序在第一个示例中,您的第一个括号为{[,第二个括号为[{

在json中,排序有所不同。 {}表示对象,[]表示数组。 [{"data":"value"}]是合法的,因为你说你有一个对象数组。 {["value"]}不合法,因为您的对象没有数组的名称。合法版本为{ "data":["value"] }

Here是一个方便的网络工具,用于验证您的JSON语法