簡體   English   中英

將對象數組和嵌套數組轉換為JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM