杰森带着空间回来了

本文关键字:空间 回来了 | 更新日期: 2023-09-27 18:36:48

>我正在尝试检查 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 值:"文本"。预期的 Int32 数组索引。

但是如果我用斜杠的第二个 JSON 替换container,一切都很好用。现在我的问题是我无法执行var message= x["text"];因为x是一个字符串。那么我如何删除 json 中的空格并检查是否包含 text 键呢?

杰森带着空间回来了

看起来当你

删除空格时,你也改变了第一个括号的顺序 在第一个示例中,您的第一个括号是{[ ,在第二个示例中,它们是[{

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

这是一个方便的网络工具来验证您的 JSON 语法