Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象数组和嵌套数组转换为JSON_Javascript_Php_Json_Api - Fatal编程技术网

Javascript 将对象数组和嵌套数组转换为JSON

Javascript 将对象数组和嵌套数组转换为JSON,javascript,php,json,api,Javascript,Php,Json,Api,我有一个API端点,它需要以下json字符串(这是一个示例) api通过以下方式访问每种类型: $userid = $data['userid']; $bookshelf = $data['bookshelf']; 等等。。。 我还可以循环浏览书籍,并使用以下内容获取每个bookid: $data['books'][$i]['bookid'] 当我通过postman之类的工具发送上面的json字符串时,效果很好。我在javascript端生成相同的json字符串时遇到问题。这就是我在网站前端

我有一个API端点,它需要以下json字符串(这是一个示例)

api通过以下方式访问每种类型:

$userid = $data['userid'];
$bookshelf = $data['bookshelf'];
等等。。。 我还可以循环浏览书籍,并使用以下内容获取每个bookid:

$data['books'][$i]['bookid']
当我通过postman之类的工具发送上面的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_编码,我最终得到的数字索引只能像
$data[0]['userid']那样访问一旦它被api解码,这与api的工作方式不同。如果api支持json字符串,则需要按照精确的顺序组装json字符串


如何获取所需格式的数据?

数字索引的出现是因为您准备的数据是数组,而不是对象。JavaScript中的数组是索引的,而不是关联的。尝试:

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

数字索引的出现是因为您将数据准备为数组,而不是对象。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

您需要创建一个对象,而不是数组

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
};

数据不应该是数组,而是对象。唯一的数组位于
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' } ] }

您可以轻松地将数组转换为预期对象:

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' } ] }

创建一个对象并为其设置属性,然后将该对象推送到
data
了解JavaScript中的数据结构:感谢所有人的帮助。这正是我想要的。创建一个对象并为其设置属性,然后将此对象推送到
data
了解JavaScript中的数据结构:感谢所有人的帮助。正是我要找的。你的哥们到处都是。你打开了多少个标签?可怜你的拉姆哈吧。我能说什么呢。爱你的帮手。到处都是你的哥们。你打开了多少个标签?可怜你的拉姆哈吧。我能说什么呢。爱帮助。