0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JSONの解析

Posted at

JSON.parse()

JSONの一般的な目的は、Webサーバーを使用してデータを送信することです。

Webサーバーからデータを受信する場合、データは常に文字列です。

JSON.parse()を使用してデータを解析すると、これらのデータはJavaScriptになります。

例-JSONの解析

Webサーバーからこのテキストを受け取ったと想像してください:

'{ "name":"Bill Gates", "age":62, "city":"Seattle"}'

JavaScript関数JSON.parse()を使用して、テキストをJavaScriptに変換してください:

var obj = JSON.parse('{ "name":"Bill Gates", "age":62, "city":"Seattle"}');

このテキストがJSON形式で書かれていることを確認してください。そうでない場合、文法エラーが発生します。

<p id="demo"></p> 
<script>
document.getElementById("demo").innerHTML = obj.name + ", " + obj.age;
</script>

サーバーからのJSON

AJAXを使用して、サーバーからJSONを取得できます。

サーバーから取得したデータがJSON形式で記述されている場合、文字列を解析してJavaScriptにすることができます。 p>

サーバーからデータを取得するには、XMLHttpRequestを使用してください:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()  {
    if (this.readyState == 4 && this.status == 200) {
        myObj =  JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML  = myObj.name;
    }
};
xmlhttp.open("GET", "json_demo.txt", true);
xmlhttp.send();

JSONの配列として

配列から派生したJSONで JSON.parse()を使用した後、このメソッドはJavaScriptではなくJavaScript配列を返します。

サーバーから返されるJSONは配列です:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()  {
    if (this.readyState == 4 && this.status == 200) {
        myArr =  JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML  = myArr[0];
    }
};
xmlhttp.open("GET", "json_demo_array.txt", true);
xmlhttp.send();

例外

日付を解析する

日付はJSONでは許可されていません。

日付を含める必要がある場合は、文字列として記述してください。

後で日付に戻すことができます:

文字列を日付に変換します:

var text =  '{ "name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}';
var obj = JSON.parse(text);
obj.birth = new Date(obj.birth);
document.getElementById("demo").innerHTML = obj.name + ", " + obj.birth;

または、reviverと呼ばれるJSON.parse() 関数の2番目のパラメーターをすでに使用できます。

reviverパラメータは関数であり、値を返す前に各属性をチェックします。

文字列を日付に変換するには、reviver関数を使用します。

var text =  '{ "name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}';
var obj = JSON.parse(text, function (key, value) {
    if  (key == "birth") {
        return new Date(value);
    } else {
         return value;
   }});
document.getElementById("demo").innerHTML = obj.name + ", " + obj.birth;

分析関数

関数はJSONでは許可されていません。

関数を含める必要がある場合は、文字列として記述してください。

後で関数に戻すことができます:

文字列を関数に変換します:

var text =  '{ "name":"Bill Gates", "age":"function () {return 62;}", "city":"Seattle"}';
var obj = JSON.parse(text);
obj.age = eval("(" + obj.age + ")");
document.getElementById("demo").innerHTML = obj.name + ", " +  obj.age();

JSONで関数を使用することは避けてください。関数はスコープを失い、eval()を使用して関数に戻す必要があります。

ブラウザのサポート

すべての主要なブラウザと最新の ECMAScript (JavaScript) 標準には、JSON.parse()関数が含まれています。

次の表の数字は、JSON.parse()関数を完全にサポートする最初のブラウザバージョンを示しています。

Chrome IE Firefox Safari Opera
Yes 8.0 3.5 4.0 10.0
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?