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文字列を作成しようとしています。これはエラーをスローしますが、結婚した名前、年齢、結婚をすべて1行(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 2012年

3
複数行の文字列の場合、単一引用符または二重引用符の代わりに、 `(バックティック文字。#1キーの左側)を使用できます。これらは「テンプレートリテラル」と呼ばれます。
ブルー

5
間違いなく、この答えに妥協せず、他の人に目を向けてください。
AsTeR

テンプレートリテラルはECMA Script 2015 Standardです。この質問と回答はすでに2012年のものです。しかし、私はそれを編集します:)
bardiir 2017年

本当に?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
Douglas

SOの@nepsdotinダグラスはダグラス・クロックフォードではなく、「彼の 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);

-5

json文字列には改行を含めることはできません。すべて1行にする必要があります{"key":"val","key2":"val2",etc....}

ただし、JSON文字列を自分で生成しないでください。それを行うライブラリはたくさんありますが、そのうちの最大のものはjqueryです。


8
JSONは改行できますが、JavaScript文字列リテラル構文はできません。

文字列の内部ではそうですが、キーと値のペアの間ではありません。
Marc B

1
エスケープされていない改行文字とJSONマークアップを含めることのできないJavaScript文字列リテラル構文は混乱していると思います。JSONマークアップには、改行を含めることができます。

1
...質問のコードをjsonlint.comに 貼り付けます(もちろん...などはありません。[検証]をクリックすると、プリティプリント時に実際に改行が挿入されることがわかります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.