Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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_Jquery_Json - Fatal编程技术网

Javascript 嵌套JSON:如何向对象添加(推送)新项?

Javascript 嵌套JSON:如何向对象添加(推送)新项?,javascript,jquery,json,Javascript,Jquery,Json,我只是从数组、对象和JSON开始——希望这里有一些简单的东西我忽略了。尝试向json对象添加(推送)新项时遇到错误 我遇到以下错误:表达式“library.push”[undefined]的结果不是函数(在代码段的底部) //这是从数据库生成的JSON对象 变量库={ “淘金热”:{ “前景”:[“幻灯片1”、“幻灯片2”、“幻灯片3”], “背景”:[“1.jpg”,“2.jpg”] }, “加利福尼亚”:{ “前景”:[“幻灯片1”、“幻灯片2”、“幻灯片3”], “背景”:[“3.jpg”

我只是从数组、对象和JSON开始——希望这里有一些简单的东西我忽略了。尝试向json对象添加(推送)新项时遇到错误

我遇到以下错误:
表达式“library.push”[undefined]的结果不是函数(在代码段的底部)

//这是从数据库生成的JSON对象
变量库={
“淘金热”:{
“前景”:[“幻灯片1”、“幻灯片2”、“幻灯片3”],
“背景”:[“1.jpg”,“2.jpg”]
},
“加利福尼亚”:{
“前景”:[“幻灯片1”、“幻灯片2”、“幻灯片3”],
“背景”:[“3.jpg”、“4.jpg”、“5.jpg”]
}
}
//这些变量将从编辑器中动态生成
var title=“淘金热”;
var前景=[“你好”,“幻灯片2”];
var backgrounds=[“1.jpg”,”;
函数保存(){
//如果标题已存在,请修改项目
如果(库[标题]){
//将值替换为新值
图书馆[标题].前景=前景;
库[标题]。背景=背景;
//保存到数据库。然后在回调时。。。
document.write('保存到'+标题+''的更改);
//如果标题不存在,请添加新项目
否则{
//为JSON对象格式化它
变量项=(“''+title+'”:{“foregrounds”:“+foregrounds+',“backgrounds”:“+backgrounds+'}”);
//问题似乎就在这里??
//错误:“表达式“library.push”[undefined]的结果不是函数”
图书馆.推送(项目);
//保存到数据库。然后在回调时。。。
文件.书写('增加:'+标题+'');
}
}
save();

是一个对象,而不是数组。您可以将内容推送到数组上。与PHP不同,Javascript有区别

您的代码尝试生成一个看起来像键值对源代码的字符串,然后将其“推”到对象上。这与它的工作原理还不太接近

您要做的是向对象添加一个新的键值对,其中键是标题,值是另一个对象。如下所示:

library[title] = {"foregrounds" : foregrounds, "backgrounds" : backgrounds};
library[library.length] = {"foregrounds" : foregrounds,"backgrounds" : backgrounds};

“JSON对象”是一个模糊的术语。您必须小心区分程序内存中的实际对象和JSON格式的文本片段。

push是一种数组方法,对于JSON对象,您可能需要定义它

这应该做到:

library[title] = {"foregrounds" : foregrounds,"backgrounds" : backgrounds};

如果您的JSON没有密钥,您可以这样做:

library[title] = {"foregrounds" : foregrounds, "backgrounds" : backgrounds};
library[library.length] = {"foregrounds" : foregrounds,"backgrounds" : backgrounds};
那么,试试这个:

var library = {[{
    "title"       : "Gold Rush",
        "foregrounds" : ["Slide 1","Slide 2","Slide 3"],
        "backgrounds" : ["1.jpg","","2.jpg"]
    }, {
    "title"       : California",
        "foregrounds" : ["Slide 1","Slide 2","Slide 3"],
        "backgrounds" : ["3.jpg","4.jpg","5.jpg"]
    }]
}
然后:


您可以使用Lodash函数来实现这一点

library[title] = _.assign({}, {'foregrounds': foregrounds }, {'backgrounds': backgrounds });
//这是从数据库生成的JSON对象
变量库={
“淘金热”:{
“前景”:[“幻灯片1”、“幻灯片2”、“幻灯片3”],
“背景”:[“1.jpg”,“2.jpg”]
},
“加利福尼亚”:{
“前景”:[“幻灯片1”、“幻灯片2”、“幻灯片3”],
“背景”:[“3.jpg”、“4.jpg”、“5.jpg”]
}
}
//这些变量将从编辑器中动态生成
var title=“淘金热”;
var前景=[“你好”,“幻灯片2”];
var backgrounds=[“1.jpg”,”;
函数save(){
//如果标题已存在,请修改项目
如果(库[标题]){
//用另一个对象的值替代一个对象(lodash)
库[title]={.assign({}{
“前景”:前景
}, {
“背景”:背景
});
console.log(库[标题]);
//保存到数据库。然后在回调时。。。
//console.log('保存到'+title+''的更改);
}
//如果标题不存在,请添加新项目
否则{
//为JSON对象格式化它
变量项=(“''+title+'”:{“foregrounds”:“+foregrounds+',“backgrounds”:“+backgrounds+'}”);
//问题似乎就在这里??
//错误:“表达式“library.push”[undefined]的结果不是函数”
图书馆.推送(项目);
//保存到数据库。然后在回调时。。。
console.log('添加:'+标题+'');
}
}
save();