2016-10-28 241 views
0

我有一個API端點需要以下json字符串(這是一個示例)。將對象數組和嵌套數組轉換爲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'] 

當我通過像郵遞員這樣的工具發送上面的json字符串,它工作正常。我在製作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它併發送到Web服務器,並移交給API或具有web服務器json_encode,我最終只能像$data[0]['userid'];一次,它是由解碼訪問數字索引api,這與api的工作方式不同。這需要json字符串按照確切的順序組裝,如果api支持的話。

我該如何去獲取所需格式的數據?

+0

創建一個對象,並設置屬性,然後推這個對象來' data' – 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' } ] }