我正在尝试学习JSON,我了解到任何带有双引号键的javascript对象都被视为JSON对象。
我构建了这个对象
var jstr1 = {"mykey": "my value"};
但是当我尝试使用JSON.parse(jstr1)解析时,我收到以下错误。看截图。
但是当我尝试解析这个
时var jstr = '{"mykey": "my value"}';,
我获得了成功,请看截图。我对此感到困惑。请解释我为什么会这样。这两种形式有什么区别。
当我将JSON作为来自任何服务的回复时,它的外观如何,是jstr
还是jstr1
提前感谢您的帮助。
答案 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;}