Как создать строку JSON в JavaScript?


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), этого не произойдет. В чем проблема?


Ответы:


85

Javascript не обрабатывает строки на нескольких строках.

Вам нужно будет объединить эти:

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

Вы также можете использовать шаблонные литералы в ES6 и выше: (документацию см. Здесь )

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

13
Или поставьте \ в конце каждой строки в литерале.
Phrogz

3
Для многострочных строк вместо одинарных или двойных кавычек вы можете использовать `(символ обратной галочки слева от клавиши # 1). Они называются шаблонными литералами.
Blue

5
Определенно: не соглашайтесь на этот ответ и смотрите на других.
AsTeR

Литералы шаблона - это стандарт ECMA Script 2015. Этот вопрос и ответ уже из 2012 года. Но отредактирую в :)
бардир

В самом деле? Объединение строк с нуля - лучший способ построить 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.

13

Использование JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'

См. Также json2.js, если вам нужна поддержка старых браузеров.
Дуглас

Да, вот ссылка на его список проектов на GitHub: github.com/douglascrockford
Дуглас

@nepsdotin Дуглас из SO - это не Дуглас Крокфорд, «в свой GitHub»
Тим Волла,

Ааа, пропустил, нет, я не Крокфорд!
Дуглас

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 (без и т. д., конечно) . После нажатия кнопки «Проверить» вы увидите, что на самом деле он вставляет символы новой строки при красивой печати.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.