2017-09-30 4 views
1

Ajax GETリクエストで特定のJsonをロードして解析しようとしました。スクリプトタグを使用しているときにJsonキーが未定義

ただし、HTMLスクリプトタグからJsonキーにアクセスしようとすると、定義されませんでした。

この問題をデバッグするために、私はJsonのすべてのキーをコンソールとJson自体に記録しました。そこで私は、この機能を利用:data.split(「,,」)の

function getInv() { 
    $.get("/inventory/", function(data) { 
     var invList = data.split(",, "); // Explanation is below 
     console.log(invList[0]) // Just testing with first object 
     console.log(Object.keys(invList[0])); 
    }); 
} 
getInv(); 

目的:

を私のバックエンドのスクリプトは異なるプログラミング言語を使用しているので、私は1つにそれを解釈しなければなりませんでしたJavascriptに適しています。 複数のJsonオブジェクトもありましたので、",, "でそれらを区切り、Jsonオブジェクトのリストを作成するためにJavascriptで分割します。

enter image description here

これだった:興味深い部分は、このようなコンソールで貼り付けJSONオブジェクトの後ということですが

enter image description here

は、関数を呼び出した後、次の出力が存在していました出力:

enter image description here

基本的にスクリプトタグでは、オブジェクトのキーにアクセスできませんでしたが、コンソールで手動で使用するとすべてのキーにアクセスできました。

これの背後にある目的は何でしょうか?異なる出力が与えられているのはかなり奇妙なようです。おそらく、invList[0]はスクリプトタグ内のJsonオブジェクトではないでしょうか?ありがとう!

+1

あなたは 'JSON.parseを使用する必要があります()'。 – Barmar

+0

_ "複数のJsonオブジェクトもあったので、" ,, "" ... _ What? – Andy

+2

バックエンドスクリプトでは、すべてのオブジェクトを配列に入れてから、その配列を ',,'で区切る代わりにJSONに変換することはできませんか? – Barmar

答えて

2

data.split()は、オブジェクトではなく文字列の配列を返します。対応するオブジェクトに対してJSON文字列を解析するには、JSON.parse()を使用する必要があります。あなたが期待していたよう

function getInv() { 
    $.get("/inventory/", function(data) { 
     var invList = data.split(",, "); 
     console.log(invList[0]) // Just testing with first object 
     var obj = JSON.parse(invList[0]); 
     console.log(Object.keys(obj)); 
    }); 
} 

あなたはそれらのすべてを解析する.map()を使用することができ、その後、あなたがオブジェクトの配列を取得します:

var invList = data.split(",, ").map(JSON.parse); 
関連する問題