2016-10-28 16 views
0

次のjson文字列が必要なAPIエンドポイントがあります(これは例です)。オブジェクト配列と入れ子配列をJSONに変換

{ 
    "userid": "1234", 
    "bookshelf": "3", 
    "bookcount": "6", 
    "books":[ 
     {"bookid": "1"}, 
     {"bookid": "2"}, 
     {"bookid": "3"}, 
     {"bookid": "6"} 
]} 

APIは、次のような状態でアクセスします。

$userid = $data['userid']; 
$bookshelf = $data['bookshelf']; 

等... 私がすることもできブックをループして、各bookidを得る:

$data['books'][$i]['bookid'] 

ときI上記のjson文字列をpostmanのようなツールを介して送信しても問題ありません。私はJavaScriptの側でこの同じjson文字列を製造する際に問題を抱えています。これは、私が自分のサイトのフロントエンドにデータを埋め込む方法です。

var data = new Array(); 
data.push({ "userid": "1234" }); 
data.push({ "bookshelf": "3" }); 
data.push({ "bookcount": "6" }); 
data.push({ "books": selectedbooks }); // This is an array of bookid objects 

問題は、私はそれをjson.stringifyとAPIにオーバーウェブサーバに送信し、またはウェブサーバのjson_encodeを持っているかどうか、私はそれがでデコードされます一度のみ$data[0]['userid'];のようにアクセスすることができ数値インデックスで終わるですapiは、apiの動作方法とは異なります。これは、APIがサポートしている場合、json文字列を正確なシーケンスでアセンブルする必要があります。

このデータを必要な形式で取得するにはどうすればよいですか?

+0

データ ' – Rajesh

+0

JavaScriptのデータ構造について学ぶ:http://eloquentjavascript.net/04_data.html –

+0

助けてくれてありがとう。まさに私が探していたもの。 – Runicode

答えて

2

データをオブジェクトではなく配列として準備するため、数値インデックスが使用されています。 JavaScriptの配列は、連想ではなく索引付けされています。試してください:

var data = { 
    userid: 1234, 
    bookshelf: 3, 
    bookcount: 6, 
    books: selectedbooks 
}; 
+1

どこにでもいてください。いくつのタブを開いたのですか?あなたのRAMに慈悲を持ってください – Rajesh

+0

ハ。何と言えばいい。愛を助ける。 – Utkanos

1

オブジェクトではなく配列を作成する必要があります。

var data = {}; 
data["userid"] = "1234"; 
data["bookshelf"] = "3"; 
data["bookcount"] = "6"; 
data["books"] = selectedbooks; // This is an array of bookid objects 
1

データは配列ではありません。オブジェクトです。唯一の配列はbooksプロパティです。

var data = {} 
data.userid = "1234"; 
data.bookshelf = "3"; 
data.bookcount = "6"; 
data.books = selectedbooks; 

以上succintly:

var data = { 
    userid: "1234", 
    bookshelf: "3", 
    bookcount: 6, 
    books: selectedbooks 
}; 
0

あなたは簡単に予想されるオブジェクトにあなたの配列を変換することができます。オブジェクトを作成し、プロパティを設定して、 `にこのオブジェクトをプッシュする

var arr = [ 
    {"userid": "1234"}, 
    {"bookshelf": "3"}, 
    {"bookcount": "6"}, 
    { 
     "books":[ 
     {"bookid": "1"}, 
     {"bookid": "2"}, 
     {"bookid": "3"}, 
     {"bookid": "6"} 
    ]} 
]; 
var obj = {} ; 
arr.forEach(item => { 
    var key = Object.keys(item)[0]; 
    obj[key] = item[key]; 
}); 
console.log(obj); 
//{ userid: '1234', 
// bookshelf: '3', 
// bookcount: '6', 
// books: 
// [ { bookid: '1' }, 
//  { bookid: '2' }, 
//  { bookid: '3' }, 
//  { bookid: '6' } ] } 
関連する問題