【问题标题】:Why are no curly brackets added to my JSON?为什么我的 JSON 中没有添加大括号?
【发布时间】:2017-09-21 07:53:11
【问题描述】:

为什么下面的代码没有在json 的值周围输出大括号?我认为 JSON 总是封装在括号内。

var json = JsonConvert.SerializeObject("some text into json", Formatting.Indented);`

生成的 JSON 现在是 "\"some text into json\"" 而不是 { "\"some text into json\"" }

【问题讨论】:

  • 为什么投反对票?这是一个基本但非常明确的问题!
  • 在没有评论的情况下投反对票是怎么回事,让我有机会改进问题?这个问题故意非常简单,因为我认为没有理由夸大它。
  • @Filburt 使用我在谷歌上的搜索词,我希望能在 1 分钟内找到答案。我没有找到任何,因此问题。如果我知道答案,我仍然会将问题连同答案一起发布,以便其他人在将来更容易找到它。
  • @JimAho 重要的是要参考研究工作以在所有帮助吸血鬼中脱颖而出 - 有一个很好的答案和 2 次重新投票,并且没有失去这个问题的危险。
  • 您想要的结果 {"some text into json"} 是无效的 JSON。上传到jsonlint.com 会报错。有关有效 JSON 的示例,请参阅 json.org

标签: c# json serialization json.net


【解决方案1】:

这是因为您只是序列化了一个字符串。因此,序列化程序只返回序列化的字符串,在 JSON 中,它只是用引号括起来的字符串:

"some text"

如果你序列化一个对象,JSON 只会添加花括号:

{
    "someStringProperty": "some text"
}

另请注意,输出中的反斜杠是 Visual Studio 再次将整个字符串封装在引号中的结果,并且还会转义字符串中的引号。序列化字符串的“真实”值只使用简单的引号。因此 Visual Studio 将显示上述 JSON 字符串,如下所示:

"\"some text\""

"{ \"someStringProperty\": \"some text\" }"

【讨论】:

    【解决方案2】:

    JSON 代表“JavaScript Object Notation”,这意味着所有数据都表示为单个 JavaScript 对象(更正确地说,是一个看起来像对象的 JavaScript 代码的字符串)。

    这就是为什么大括号不是强制性的,它们是表示复杂对象结构所必需的。 { "some text into json" }(为了清楚起见,我省略了引号转义)只是 JavaScript 编译器的普通语法错误!你可以有{ "key": "value", "other key": "other value" } 对象,但是没有值的键是错误的。

    所以"some text into json" 是字符串对象"some text into json" 唯一可能正确的JSON。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2014-05-07
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2015-06-14
      • 2021-02-26
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多