为什么没有花括号添加到我的JSON中?
问题描述:
为什么下面的代码不输出周围的json
值大括号?我认为JSON始终封装在括号内。为什么没有花括号添加到我的JSON中?
var json = JsonConvert.SerializeObject("some text into json", Formatting.Indented);`
产生的JSON现在0而非{ "\"some text into json\"" }
答
这是因为你根本序列化的字符串。因此,串行器仅返回序列化的字符串,这在JSON,只是用引号括起来的字符串:
"some text"
JSON只有当你序列化一个对象增加了大括号:
{
"someStringProperty": "some text"
}
还要注意, Visual Studio的输出结果中的反斜杠将整个字符串再次封装在引号中,并且也会在字符串中转义引号。序列化字符串的“真实”值只使用简单的引号。因此如下的Visual Studio将显示上述JSON字符串:
"\"some text\""
或
"{ \"someStringProperty\": \"some text\" }"
答
的JSON代表“JavaScript对象表示法”,这意味着所有的数据被表示为一个单一的JavaScript对象(一个字符串看起来像对象的JavaScript代码,更正确)。
这就是为什么大括号不是强制性的,他们表示复杂的对象结构需要那么必要。 { "some text into json" }
(我忽略了clariness的引号转义)对于JavaScript编译器来说只是简单的语法错误!你可以有{ "key": "value", "other key": "other value" }
对象,但没有值的键是错误的。
所以"some text into json"
是字符串对象"some text into json"
唯一可能的正确JSON。
为什么downvotes?这是一个基本的,但非常明确的问题! – Spontifixus
如果没有评论,评论会给我一个改善问题的机会,这是怎么回事?这个问题故意非常简单,因为我没有理由让它膨胀。 –
猜测这可能是@Filburt的一个原因,将其更改为代码。 –