普通字符串是否有效JSON还是必须有对象吗?
例如:
"morpheus"
与
{
"name": "morpheus"
}
答案 0 :(得分:4)
重要
这个答案曾经说过不,JSON的第一个字符必须是
{
或[
。在我写这篇文章的时候,我正在用Python测试它。在Python(至少2.7.x)中,
json.loads("a")
给出错误,这意味着普通字符串在那里不是有效的JSON。其他人正确地指出,不能说普通字符串不是有效的JSON。有关更合适的答案,请参阅this question。
此时我只能说它取决于你的环境。在javascript中它可能是有效的,在python中它可能不是,等等。
JSON代表JavaScript Object Notation
的引用JSON基于两种结构:
名称/值对的集合。在各种语言中,这是 实现为对象,记录,结构,字典,哈希表,键控 列表或关联数组。有序的值列表。多数情况 语言,这被实现为数组,向量,列表或序列。 这些是通用数据结构。几乎所有的现代编程 语言以某种形式支持它们。这是有意义的 与编程语言可互换的数据格式也是 基于这些结构。
在JSON中,他们采用以下形式:
对象是一组无序的名称/值对。对象开始 with {(左括号)并以}结尾(右括号)。每个名字都是 后跟:(冒号)和名称/值对分开, (逗号)。
记下我加粗的文字。
因此,JSON是JS Object 表示法,暗示名称:值对的JSON表示必须始终采用
的形式{
"name": "value"
}
请注意,您还可以将“根对象”设为列表
[
{
"name1": "value1"
},
{
"name2": "value2"
}
]
这基本上意味着JSON包含多个对象。
正如Sunny R Gupta指出的那样,这也是有效的JSON
[
"this",
"is",
"valid"
]
请注意,这是有效的,因为字符串不是"name":"value"
形式,而只是字符串。考虑到这一点的有效选项将是
{
"name": "Morpheus"
}
或
[
"morpheus"
]
JSON 的第一个字符必须是{
或[
答案 1 :(得分:3)
在Javascript中有效。
首先尝试测试时可能会感到困惑:
JSON.parse("bob");
这会因错误而失败:"意外的令牌b"。但是,这相当于只将普通bob
作为回复中的文字传递,而不是"bob"
。如果添加引号:
JSON.parse('"bob"')
你得到简单的字符串" bob"你应该回来。
答案 2 :(得分:1)
更新:2018年:
我最初回答这个问题已有4年了。那时引号中的纯字符串不是有效的JSON。截至今天,它被接受为有效的JSON。
以下内容供人们查看之前的错误:
解析一个简单的字符串给出:
Parse error on line 1:
"morpheus"
^
Expecting '{', '['
表示它需要是一个对象或一个数组。
提示:要验证JSON字符串并查看哪些有效,哪些无效,请尝试使用http://jsonlint.com