带或不带引号的JSON对象

Moh*_*ain 9 javascript json

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

我构建了这个对象

var jstr1 = {"mykey": "my value"};
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

但是,当我试图解析这个

var jstr = '{"mykey": "my value"}';,
Run Code Online (Sandbox Code Playgroud)

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

当我将JSON作为来自任何服务的响应时,它的外观如何,是否会以jstr或的形式出现jstr1

提前感谢您的帮助.

Koo*_*Inc 24

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

所以

var myObj = {mykey: "my value"}
   ,myObjJSON = JSON.stringify(myObj);
Run Code Online (Sandbox Code Playgroud)

根据评论:没有JSON 对象这样的东西.有JSON字符串,可以是parsedJavascript对象.Javascript对象可以是stringifiedJSON字符串.在JSON字符串内引用了键和值.所以上面的结果是一个包含的字符串'{"mykey":"my value"}'.

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


Com*_*eek 6

这段代码

var jstr1 = {"mykey": "my value"};
Run Code Online (Sandbox Code Playgroud)

使用Object Literal Notation创建JavaScript对象.
对于Object Literal NotationJSON(JON是JavaScript对象表示法的简称)之间的区别,请参见:JSON和Object Literal Notation有什么区别?

从逻辑上讲,传递这些数据是没有意义的JSON.parse().

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

SyntaxError:意外的令牌o

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

jstr1.toString();
// gives us [object Object]
// ----------?
Run Code Online (Sandbox Code Playgroud)


Hil*_*lmi 5

你有一些误解 JSON.parse

JSON.parse takes string and parse it to JAVASCRIPT object
JSON.stringify takes an object and parse it to a string
Run Code Online (Sandbox Code Playgroud)

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

JSON.parse('{"a":"b"}')
Run Code Online (Sandbox Code Playgroud)

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

但是你跑的时候

JSON.parse({"a":"b"})
Run Code Online (Sandbox Code Playgroud)

它没有,因为对象被转换为字符串

"[object Object]"
Run Code Online (Sandbox Code Playgroud)

这里是"[object Object]"在字母处无效语法的错误 o