JSONデータの文字列が与えられた場合、その文字列をJavaScriptオブジェクトに安全に変換するにはどうすればよいですか?
明らかに、私はこれを次のようなもので安全に行うことができます:
var obj = eval("(" + json + ')');
しかし、それでは他のコードを含むJSON文字列に対して脆弱なままになり、単純に評価するのは非常に危険なようです。
JSONデータの文字列が与えられた場合、その文字列をJavaScriptオブジェクトに安全に変換するにはどうすればよいですか?
明らかに、私はこれを次のようなもので安全に行うことができます:
var obj = eval("(" + json + ')');
しかし、それでは他のコードを含むJSON文字列に対して脆弱なままになり、単純に評価するのは非常に危険なようです。
JSON.parse(jsonString)
合理的に最新のブラウザーを保証できる限り、純粋な JavaScript アプローチです。
jQuery メソッドは非推奨になりました。代わりに次の方法を使用してください。
let jsonObject = JSON.parse(jsonString);
非推奨のjQuery機能を使用した元の回答:
jQueryを使用している場合は、次を使用してください:
jQuery.parseJSON( jsonString );
それはまさにあなたが探しているものです (jQuery のドキュメントを参照してください)。
この回答はIE<7の場合であり、最新のブラウザーの場合は上記のJonathanの回答を確認してください。
この回答は古く、上記のジョナサンの回答(JSON.parse(jsonString)
)が最良の回答になりました。
JSON.orgには、JavaScript用の4つの異なる言語を含む、多くの言語用のJSONパーサーがあります。ほとんどの人はjson2.jsをgotoの実装と見なすと思います。
「 JSON.parse()」の簡単なコード例を使用します。
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
そしてそれを逆にします:
var str = JSON.stringify(arr);
これが問題のようです:
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'
});
他の方法についてはわかりませんが、Prototype(JSONチュートリアル)で行う方法は次のとおりです。
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
evalJSON()
引数としてtrueを指定して呼び出すと、着信文字列がサニタイズされます。
jQueryを使用している場合は、次のものも使用できます。
$.getJSON(url, function(data) { });
次に、次のようなことができます
data.key1.something
data.key1.something_else
等
楽しみのために、関数を使用する方法を次に示します。
jsonObject = (new Function('return ' + jsonFormatData))()
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
コールバックには返されたデータが渡されます。これは、JSON 構造によって定義され、$.parseJSON()
メソッドを使用して解析される JavaScript オブジェクトまたは配列になります。
を使用する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);
この Data オブジェクトでメソッドを使用してみてください。例: Data='{result:true,count:1}
'
try {
eval('var obj=' + Data);
console.log(obj.count);
}
catch(e) {
console.log(e.message);
}
このメソッドは、シリアル ポート プログラミングを使用しているときに Nodejs で非常に役立ちます。
「より良い」方法を見つけました:
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'
});
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);