带或不带引号的JSON对象

时间:2013-09-05 11:29:20

标签: javascript json

我正在尝试学习JSON,我了解到任何带有双引号键的javascript对象都被视为JSON对象。

我构建了这个对象

var jstr1 = {"mykey": "my value"};

但是当我尝试使用JSON.parse(jstr1)解析时,我收到以下错误。看截图。

enter image description here

但是当我尝试解析这个

var jstr = '{"mykey": "my value"}';,

我获得了成功,请看截图。我对此感到困惑。请解释我为什么会这样。这两种形式有什么区别。

当我将JSON作为来自任何服务的回复时,它的外观如何,是jstr还是jstr1

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:24)

您正在创建Javascript Object。如果您想要一个JSON字符串,请使用JSON.stringify

所以

var myObj = {mykey: "my value"}
   ,myObjJSON = JSON.stringify(myObj);

基于评论: 没有 JSON 对象 这样的东西。有JSON字符串,可以是parsed到Javascript对象。 Javascript对象可以是stringified到JSON字符串。在JSON字符串内引用了键和值。所以上面的结果是包含'{"mykey":"my value"}'字符串

尝试在浏览器控制台中解析myObjJSON(使用:JSON.parse(myObjJSON)),然后获得:Object {mykey: "my value"}

答案 1 :(得分:6)

此代码

var jstr1 = {"mykey": "my value"};

使用 Object Literal Notation 创建一个JavaScript对象。
有关对象文字符号 JSON (JON是 JavaScript对象符号的缩写)之间的区别,请参见此处:What is the difference between JSON and Object Literal Notation? < / p>

将此数据传递给JSON.parse()

在逻辑上没有意义

与您的第一个变体(var jstr = '{"mykey": "my value"}';)的不同之处在于它创建了一个“原始”字符串。除原始字符序列外,您无法访问该字符串上的任何内容。使用JSON.parse()为我们提供了一个从字符串创建的可用表单(对象)。

  

SyntaxError:意外的令牌o

这来自jstr1的自动字符串转换:

jstr1.toString();
// gives us [object Object]
// ----------↑

答案 2 :(得分:5)

您对JSON.parse

有一些误解
JSON.parse takes string and parse it to JAVASCRIPT object
JSON.stringify takes an object and parse it to a string

这就是你运行以下内容的原因

JSON.parse('{"a":"b"}')

它起作用,因为它需要一个json字符串

但是当你跑步时

JSON.parse({"a":"b"})

它没有,因为该对象被转换为

的字符串
"[object Object]"

以下是错误,其中“[object Object]”在字母o处无效语法

答案 3 :(得分:2)

JSON.parse()接受一个字符串并转换为JSON对象,它不会将javascript对象作为参数。请参阅JSON.parse()它可以为您提供如下结果

JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null

并且知道如果要解析的字符串是无效的JSON,则抛出一个SyntaxError异常。所以这就是jstr1上的语法错误(它不是JSON字符串)

答案 4 :(得分:-6)

这个怎么样:

MarahJSONObject gtp = new MarahJSONObject()
    gtp.put("ecomm_prodid", "123")
    gtp.put("ecomm_pagetype", "cart")
    gtp.put("ecomm_totalvalue", "19.99")

String r = gtp.toString()
    gtp.keySet().each {
        r = r.replace(/"${it}"/, it)
    }
    println r

然后你会得到: {的ecomm_pagetype:&#34;车&#34;,ecomm_prodid自:&#34; 123&#34;,ecomm_totalvalue参数:&#34; 19.99&#34;}