我有一个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']
当我通过像邮递员这样的工具发送上面的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的工作方式不同。如果api支持它,则需要以精确的顺序组装json字符串。
如何以所需格式获取此数据?
答案 0 :(得分:2)
数字索引即将到来,因为您正在将数据准备为数组,而不是对象。 JavaScript中的数组是索引的,而不是关联的。尝试:
var data = {
userid: 1234,
bookshelf: 3,
bookcount: 6,
books: selectedbooks
};
答案 1 :(得分:1)
您需要创建一个对象,而不是数组。
var data = {};
data["userid"] = "1234";
data["bookshelf"] = "3";
data["bookcount"] = "6";
data["books"] = selectedbooks; // This is an array of bookid objects
答案 2 :(得分: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
};
答案 3 :(得分: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' } ] }