如何在JavaScript中创建JSON字符串?


96
window.onload = function(){
    var obj = '{
            "name" : "Raj",
            "age"  : 32,
            "married" : false
            }';

    var val = eval('(' + obj + ')');
    alert( "name : " + val.name + "\n" +
           "age  : " + val.age  + "\n" +
           "married : " + val.married );

}

在类似这样的代码中,我试图创建JSON字符串只是为了玩转。引发错误,但是如果我将所有的姓名,年龄,已婚者放在一行(第2行)中,则不会。有什么问题?


Answers:


85

Javascript无法处理多行字符串。

您需要将这些连接起来:

var obj = '{'
       +'"name" : "Raj",'
       +'"age"  : 32,'
       +'"married" : false'
       +'}';

您还可以在ES6及更高版本中使用模板文字:(请参阅此处的文档

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;

13
或在文字的每行末尾添加一个\。
Phrogz 2012年

3
对于多行字符串,可以使用`(反引号字符。#1键左侧)来代替单引号或双引号。这些被称为“模板文字”。
蓝色

5
绝对:不要满足于这个答案,而是去寻找其他答案。
AsTeR

模板文字是ECMA Script 2015 Standard。这个问题已经是2012年了。但我将在:)中编辑它
bardiir '17

真?从头开始进行字符串连接是构建JSON的最佳方法?我认为另一个答案应该是公认的答案。
rory.ap

265

我这样做的方式是:

   var obj = new Object();
   obj.name = "Raj";
   obj.age  = 32;
   obj.married = false;
   var jsonString= JSON.stringify(obj);

我猜这种方式可以减少出错的机会。


62

函数JSON.stringify会将您的json对象转换为字符串:

var jsonAsString = JSON.stringify(obj);

如果浏览器没有实现它(IE6 / IE7),请使用JSON2.js脚本。这是安全的,因为它使用本机实现(如果存在)。


23

这可以很简单

var obj = new Object();
obj.name = "Raj";
obj.age = 32;
obj.married = false;

//convert object to json string
var string = JSON.stringify(obj);

//convert string to Json Object
console.log(JSON.parse(string)); // this is your requirement.


5

我认为这种方式可以帮助您...

var name=[];
var age=[];
name.push('sulfikar');
age.push('24');
var ent={};
for(var i=0;i<name.length;i++)
{
ent.name=name[i];
ent.age=age[i];
}
JSON.Stringify(ent);

-6

json字符串中不能包含换行符。您必须全部完成以下一行:{"key":"val","key2":"val2",etc....}

但是不要自己生成JSON字符串。有很多库可以为您做到这一点,其中最大的库是jquery


8
JSON可以有换行符,但JavaScript字符串文字语法不能。

是在字符串内部,是的,但不是在键/值对之间。
Marc B

1
我认为您在混淆JavaScript字符串文字语法,该语法不能包含未转义的换行符和JSON标记。JSON标记肯定可以包含换行符。

1
...将您问题中的代码粘贴到jsonlint.com中 (当然不添加etc ....)。单击验证后,您会看到它漂亮地打印时实际上会插入换行符。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.