[英]Converting array of objects and nested array to 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'];
等等...我還可以瀏覽這些書,並獲得每個書號:
$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'];
這樣訪問的數字索引$data[0]['userid'];
一旦由api解碼,則與api的工作方式不同。 如果api支持的話,這將要求json字符串以正確的順序進行組裝。
如何以所需的格式獲取此數據?
數字索引即將到來是因為您正在將數據准備為數組而不是對象。 JavaScript中的數組是索引的,而不是關聯的。 嘗試:
var data = {
userid: 1234,
bookshelf: 3,
bookcount: 6,
books: selectedbooks
};
您需要創建一個對象,而不是一個數組。
var data = {};
data["userid"] = "1234";
data["bookshelf"] = "3";
data["bookcount"] = "6";
data["books"] = selectedbooks; // This is an array of bookid objects
您的數據不應是數組,而應是對象。 唯一的數組在books
屬性中。
var data = {}
data.userid = "1234";
data.bookshelf = "3";
data.bookcount = "6";
data.books = selectedbooks;
或更簡潔地:
var data = {
userid: "1234",
bookshelf: "3",
bookcount: 6,
books: selectedbooks
};
您可以輕松地將數組轉換為期望的對象:
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' } ] }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.