2016-08-07 9 views
0

フェッチ要求を使用してデータを取得する。 JSONオブジェクトのパスは文字列変数に依存します。文字列をパスの配列として参照できるオブジェクトに変換するにはどうすればよいでしょうか。ここに私のコードだ:要求でJSONオブジェクトを参照する際に文字列を使用する

var path = 'bob'; 

fetch(request) 
    .then(function(response) { 
     if (!response.ok) { 
      throw Error(response.statusText); 
     } 
     return response.json(); 
    }).then(function(json) { 

     var data = json.message.path[0].text; 

    }).catch(function(error) { 
     console.log(error); 
    }); 

JSON:

{ 
"message": { 
    "bob": [ 
     { 
     "name_id": "3351", 
     "name": "bob", 
     "text": "lorem ipsum" 
     }, 
     { 
     "name_id": "34562", 
     "name": "bob", 
     "text": "lorem ipsum2" 
     } 
    ] 
} 

基本的には、pathは、ドット表記で使用する正しいオブジェクトを定義します。しかし、オブジェクトは配列を参照することもできなければなりません。

すべてのソリューションはありますか?

+0

はあなたがオブジェクトが配列を参照することができなければならない」とはどういう意味ですか"? 'json'と' path'の構造の具体例を挙げることができますか? – qxz

+0

JSONは整理されていて、パスは配列なので、その配列の最初の項目を取得する必要があります。しかし、私は文字列でパスを参照することしかできません。サンプルコードを参照してください。 – bounty

+0

あなたの例では、 'path'は配列ではなく、文字列です...あなたは配列に変換したいパスを表す文字列を得ることを意味しますか? – qxz

答えて

1

あなたは使用して試みることができる:

パスはあなたが定義されているオブジェクトの名前です
var data = json.message[path][0].text; 

path = "bob"; 
0

あなたは形式user.indexpath変数を持っている場合、あなたはこのようなあなたのJSONに対応するメッセージを参照することができます:

path = path.split("."); 
var name = path[0], index = path[1]; 
var data = json.message[name][index].text; 

path"bob.1"であれば、data"lorem ipsum2"

json.message[name]がに評価になるだろうメッセージの配列その配列にインデックスを付けるには、他の配列と同様に値の後ろに括弧を入れてください。(json.message[name])[index]と等価です。これはvar array = json.message[name]と等価で、array[index]と等価です。

このソリューションではエラーチェックは行われず、指定されたユーザーがjson.messageでない場合はエラーが発生します。

関連する問題