是一个普通的字符串有效的JSON?

时间:2014-06-12 12:21:40

标签: json

普通字符串是否有效JSON还是必须有对象吗?

例如:

"morpheus"

{
    "name": "morpheus"
}

3 个答案:

答案 0 :(得分:4)

  

重要

     

这个答案曾经说过不,JSON的第一个字符必须是{[

     

在我写这篇文章的时候,我正在用Python测试它。在Python(至少2.7.x)中,json.loads("a")给出错误,这意味着普通字符串在那里不是有效的JSON。

     

其他人正确地指出,不能说普通字符串不是有效的JSON。有关更合适的答案,请参阅this question

     

此时我只能说它取决于你的环境。在javascript中它可能是有效的,在python中它可能不是,等等。

JSON代表JavaScript Object Notation

以下是the official site

的引用
  

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