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 3 years have passed since last update.

JSONの解析

Last updated at Posted at 2021-10-21

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形式で書かれていることを確認してください。そうでないと、文法エラーが発生します。

HTMLでJavaScriptオブジェクトを使用してください:

<p id="demo"></p> 

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

サーバーからのJSON

AJAXリクエストを使用して、サーバーからJSONをリクエストできます。

サーバーの応答がJSON形式で記述されている限り、文字列を解析してJavaScriptオブジェクトにすることができます。

サーバーからデータを取得するには、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;

または、 JSON.parse()関数の2番目のパラメーター「reviver」を使用することもできます。

この 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?