Як створити рядок 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
Або поставте \ в кінці кожного рядка в буквалі.
Фрогц

3
Для багаторядкових рядків замість одинарних або подвійних лапок можна використовувати `(символ зворотного позначення. Ліворуч від клавіші №1). Вони називаються "літералами шаблонів".
Синій

5
Безумовно: не погоджуйтесь на цю відповідь і зверніть увагу на інших.
AsTeR

Буквальні літерали є стандартом ECMA Script 2015. Це питання та відповідь вже з 2012 року. Але я відредагую це :)
bardiir

Дійсно? Конкатенація рядків з нуля - найкращий спосіб побудувати JSON? Я думаю, що іншою відповіддю має бути прийнята відповідь.
rory.ap

264

Я це роблю так:

   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"
TimWolla

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

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.