私はJavaScriptでJSON文字列を解析したいです。反応はこんな感じです
var response = '{"result":true,"count":1}';
これからどのように値result
とcount
を得ることができますか?
ほとんどのブラウザは JSON.parse()
をサポートしています。これはECMA-262 5th Edition(JavaScriptが準拠している仕様)で定義されています。使い方は簡単です。
var json = '{"result":true,"count":1}',
obj = JSON.parse(json);
alert(obj.count);
/* or ES6 */
const json = '{"result":true,"count":1}' || {};
const { result, count } = JSON.parse(json);
alert(result);
alert(count);
そうでないブラウザには json2.js を使って実装できます。
コメントで述べたように、すでにjQueryを使用している場合は、利用可能であれば$.parseJSON
にマッピングするJSON.parse
関数、または古いブラウザではeval
の形式があります。ただし、これはJSON.parse
によっても実行される追加の不要なチェックを実行するので、最高のオールラウンドパフォーマンスを得るためには、次のように使用することをお勧めします。
var json = '{"result":true,"count":1}',
obj = JSON && JSON.parse(json) || $.parseJSON(json);
これにより、jQueryが文字列をネイティブ解析関数に渡す前に健全性チェックを実行するのではなく、すぐにネイティブJSON.parse
を使用するようになります。
まず第一に、あなたはJSONコードが有効であることを確認する必要があります。
その後、可能であればjQueryやPrototypeなどのJavaScriptライブラリーを使用することをお勧めします。これらのものはそれらのライブラリーでうまく処理されるからです。
一方、ライブラリを使用したくなく、JSONオブジェクトの有効性を保証することができる場合は、単に文字列を無名関数でラップしてeval関数を使用します。
絶対的に信頼されていない別のソースからJSONオブジェクトを取得している場合、これは推奨されません。eval関数を使用するとコードを無効にできるためです。
これは、eval関数の使用例です。
var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);
どのブラウザを使用しているかを制御したり、古いブラウザを使用している人を心配していない場合は、常にJSON.parseメソッドを使用できます。
これは将来のための本当に理想的な解決策です。
もしあなたがこれを外部のサイトから入手しているのであれば、jQueryのgetJSONを使うのが役に立つかもしれません。リストの場合は、$。eachを使用してそれを繰り返すことができます。
$.getJSON(url, function (json) {
alert(json.result);
$.each(json.list, function (i, fb) {
alert(fb.result);
});
});
古いブラウザで JSON 3 を使用したい場合は、以下の条件で条件付きで読み込むことができます。
<script>
window.JSON ||
document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>
クライアントが実行しているブラウザに関係なく、標準のwindow.JSON
オブジェクトが利用可能になりました。
次の例はそれを明確にします。
var jsontext = '{"name":"x","age":"11"}';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);
// Output: x, 11
OR
eval
関数を使うこともできます。次の例ではeval
関数を使用しています。
var jsontext = '{"name":"x","age":"11"}';
var getContact = eval('(' + jsontext + ')');
document.write(getContact.name + ", " + getContact.age);
// Output: x, 11
JSON.parse
関数はeval関数よりも安全で高速に実行されるため、JSON.parse
関数を使用することをお勧めします。
引用符として二重引用符「 "」を含むMVC @ViewbagからJSON.parseに文字列変数(整形式のJSON文字列)を渡す場合は、JSON.parse(jsonstring
)の前に処理する必要があります。
var jsonstring = '@ViewBag.jsonstring';
jsonstring = jsonstring.replace(/"/g, '"');
他の答えのようにeval関数を使うこともできます。 (余分な波括弧を忘れないでください。)もっと深く掘り下げるとき、またはjQuery関数parseJSON
を使用する理由がわかります。
var response = '{"result":true , "count":1}';
var parsedJSON = $.parseJSON(response);
OR
以下のコードを使うことができます。
var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);
そしてjsonObject.result
とjsonObject.count
を使ってフィールドにアクセスすることができます。
parse()
メソッドを使う最も簡単な方法:
var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);
これは、値を取得する方法の例です。
var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
ライブラリを使わなくてもeval
を使うことができます - 使うべき唯一の時です。ライブラリを使うほうが安全です。
例えば...
var response = '{"result":true , "count":1}';
var parsedJSON = eval('('+response+')');
var result=parsedJSON.result;
var count=parsedJSON.count;
alert('result:'+result+' count:'+count);
JSON.parse()は、関数に渡されたすべてのJSON StringをJSONオブジェクトに変換します。
理解を深めるために、 F12 ブラウザのInspect Elementを開き、コンソールに移動して次のコマンドを入力します。
var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.
今コマンドを実行します。
console.log(JSON.parse(response));
Object {result:true、count:1}として出力されます。
そのオブジェクトを使うために、それを変数に割り当てることができます。obj
としましょう。
var obj = JSON.parse(response);
obj
とドット(。)演算子を使用して、JSONオブジェクトのプロパティにアクセスできます。
コマンドを実行してみてください
console.log(obj.result);
もし良かったら
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
jsonObjectによって (。) dotを使用してJSON要素にアクセスできます。
JsonObject.result;
JsonObject.count;
JSON.parse(myObject)
はうまくいくと思いました。しかし、ブラウザによっては、eval('('+myObject+')')
を使う価値があるかもしれません。私が気をつけることをお勧めできる唯一の問題は、JSONのマルチレベルリストです。
簡単な方法は次のとおりです。
var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
require(["dojo/json"], function(JSON){
JSON.parse('{"hello":"world"}', true);
});
他の多くの人が述べたように、ほとんどのブラウザはJSON.parse
とJSON.stringify
をサポートしています。
さて、私はあなたが AngularJS (これを強くお勧めします)を使っているなら、それもあなたが必要とする機能を提供することを付け加えたいと思います。
var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)
他の選択肢を提供するためにAngularJSに関するものを追加したいだけでした。 AngularJSは、Internet Explorer 8(およびそれ以前のバージョン)を正式にはサポートしていませんが、経験上、ほとんどのものはうまく機能するようです。
あなたがjQueryを使用する場合、それは簡単です:
var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1