1438

JSONデータの文字列が与えられた場合、その文字列をJavaScriptオブジェクトに安全に変換するにはどうすればよいですか?

明らかに、私はこれを次のようなもので安全に行うことができます:

var obj = eval("(" + json + ')');

しかし、それでは他のコードを含むJSON文字列に対して脆弱なままになり、単純に評価するのは非常に危険なようです。

4

27 に答える 27

2072

JSON.parse(jsonString)合理的に最新のブラウザーを保証できる限り、純粋な JavaScript アプローチです。

于 2011-04-16T11:45:21.977 に答える
892

jQuery メソッドは非推奨になりました。代わりに次の方法を使用してください。

let jsonObject = JSON.parse(jsonString);

非推奨のjQuery機能を使用した元の回答

jQueryを使用している場合は、次を使用してください:

jQuery.parseJSON( jsonString );

それはまさにあなたが探しているものです (jQuery のドキュメントを参照してください)。

于 2010-09-02T14:07:07.757 に答える
165

この回答はIE<7の場合であり、最新のブラウザーの場合は上記のJonathanの回答を確認してください。

この回答は古く、上記のジョナサンの回答JSON.parse(jsonString))が最良の回答になりました。

JSON.orgには、JavaScript用の4つの異なる言語を含む、多くの言語用のJSONパーサーがあります。ほとんどの人はjson2.jsをgotoの実装と見なすと思います。

于 2008-09-05T00:13:52.627 に答える
77

「 JSON.parse()」の簡単なコード例を使用します。

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

そしてそれを逆にします:

var str = JSON.stringify(arr);
于 2013-12-15T23:26:31.860 に答える
25

これが問題のようです:

Ajax websocket などを介して受け取る入力であり、文字列形式になりますが、それがJSON.parsable. 問題は、常に を実行するとJSON.parse、プログラムは「正常に」続行される可能性がありますが、コンソールに恐ろしい"Error: unexpected token 'x'".

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
于 2013-04-29T07:37:16.990 に答える
24

他の方法についてはわかりませんが、Prototype(JSONチュートリアル)で行う方法は次のとおりです。

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

evalJSON()引数としてtrueを指定して呼び出すと、着信文字列がサニタイズされます。

于 2008-09-05T00:13:51.440 に答える
20

jQueryを使用している場合は、次のものも使用できます。

$.getJSON(url, function(data) { });

次に、次のようなことができます

data.key1.something
data.key1.something_else

于 2008-10-24T13:57:10.490 に答える
17

楽しみのために、関数を使用する方法を次に示します。

 jsonObject = (new Function('return ' + jsonFormatData))()
于 2014-10-15T08:11:30.117 に答える
16
$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

コールバックには返されたデータが渡されます。これは、JSON 構造によって定義され、$.parseJSON()メソッドを使用して解析される JavaScript オブジェクトまたは配列になります。

于 2010-05-06T06:23:08.867 に答える
14

を使用するJSON.parseのがおそらく最良の方法です。

これが例です

var jsonRes = '{ "students" : [' +
          '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
          '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
          '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);
于 2015-04-22T09:40:23.497 に答える
10

この Data オブジェクトでメソッドを使用してみてください。例: Data='{result:true,count:1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

このメソッドは、シリアル ポート プログラミングを使用しているときに Nodejs で非常に役立ちます。

于 2014-07-15T18:53:54.920 に答える
5

「より良い」方法を見つけました:

CoffeeScript では:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

Javascript の場合:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
于 2015-02-18T13:38:07.537 に答える
3

JSON.parse()関数に渡された JSON 文字列を JSON オブジェクトに変換します。

理解を深めるためF12に、ブラウザで「要素の検査」を押して開き、コンソールに移動して次のコマンドを記述します。

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

次のコマンドを実行します。

console.log(JSON.parse(response));

Object として出力を取得します{result: true, count: 1}

そのオブジェクトを使用するには、それを変数に割り当てることができますobj

var obj = JSON.parse(response);

objおよびドット ( ) 演算子を使用.すると、JSON オブジェクトのプロパティにアクセスできます。

次のコマンドを実行してみてください。

console.log(obj.result);
于 2016-12-03T15:32:36.053 に答える