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

индеец
источник
2
См. Ответы stackoverflow.com/questions/3904269/…
powtac

Ответы:

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 (без и т. д., конечно) . После нажатия кнопки «Проверить» вы увидите, что на самом деле он вставляет символы новой строки при красивой печати.