Javascript 清除JSON值,但不清除结构
我是JavaScript新手,我希望有一个JSON结构,如下所示: JSON JS 我已经建立了这个,但现在我的问题。我通过一个函数动态生成它,JSON模型是一个全局变量。现在,当我调用函数两次,以此类推,JSON中有新旧值。但我只想要新的JSON值。 我试过好几种方法,但都不管用Javascript 清除JSON值,但不清除结构,javascript,json,Javascript,Json,我是JavaScript新手,我希望有一个JSON结构,如下所示: JSON JS 我已经建立了这个,但现在我的问题。我通过一个函数动态生成它,JSON模型是一个全局变量。现在,当我调用函数两次,以此类推,JSON中有新旧值。但我只想要新的JSON值。 我试过好几种方法,但都不管用 function getJSONObjektList() { //HauptJSONknoten var jsonObjekt = {}; jsonObjekt.ObjektId = [];
function getJSONObjektList() {
//HauptJSONknoten
var jsonObjekt = {};
jsonObjekt.ObjektId = [];
jsonObjekt.Selected = [];
//HilfsJSONknoten
var utilJSONObjekt = {};
utilJSONObjekt.SelectedObjektId;
utilJSONObjekt.SelectedObjektWerte = [];
doc = XYZ.GetCurrentDocument();
doc.GetAllObjects(function (objects) {
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
var id = obj.id;
var caption = obj.caption;
var type = obj.type;
var my = obj.my;
console.log("[obj:" + obj + " id:" + id + " caption:" + caption + " type:" + type + " my: " + my + "]");
//liste alle verfuegbaren Objekte auf
jsonObjekt.ObjektId.push(id);
if (type === "Statusbox") {
doc.GetObject(id, function () {
var statusboxInhalt = this.Data.Rows;
for (var j = 0; j < statusboxInhalt.length; j++) {
var inhalt = statusboxInhalt[j];
console.log("Name: " + inhalt[0].text + " Wert: " + inhalt[2].text);
utilJSONObjekt.SelectedObjektId = inhalt[0].text;
var valAr = inhalt[2].text.split(",");
for (var k = 0; k < valAr.length; k++) {
utilJSONObjekt.SelectedObjektWerte.push($.trim(valAr[k]));
}
jsonObjekt.Selected.push(utilJSONObjekt);
}
});
}
}
});
$('#txtboxQv').append(JSON.stringify(jsonObjekt));
return jsonObjekt;
}
函数getJSONObjektList(){
//HauptJSONknoten
var jsonObjekt={};
jsonObjekt.ObjektId=[];
jsonObjekt.Selected=[];
//希尔夫森克顿
var utilJSONObjekt={};
utilJSONObjekt.SelectedObjektId;
utilJSONObjekt.selectedobjektwere=[];
doc=XYZ.GetCurrentDocument();
doc.getAllObject(函数(对象){
对于(var i=0;ivar json = {};
json.ObjektId = ["1", "11", "111", "1111"];
json.Selected = [];
//console.log(JSON.stringify(json));
var util = {};
util.SelectedObjektId = "555";
util.SelectedObjektValues = ["Test1", "Test2", "Test3"];
json.Selected.push(util);
//console.log(JSON.stringify(json));
util = {}; // this is the key, you need to create a new Object
util.SelectedObjektId = "112555";
util.SelectedObjektValues = ["11Test1", "22Test2", "22Test3"];
json.Selected.push(util);
我所做的语法更改指南:
- [a,b,…]-新数组(a,b,…)的语法糖李>
- {}-新对象()的语法李>
{
"ObjektId": [
"1",
"11",
"111",
"1111"
],
"Selected": [
{
"SelectedObjektId": "555",
"SelectedObjektValues": [
"Test1",
"Test2",
"Test3"
]
},
{
"SelectedObjektId": "112555",
"SelectedObjektValues": [
"11Test1",
"22Test2",
"22Test3"
]
}
]
}
更新:
这是我对你期望的最好猜测:
function getJSONObjektList() {
//HauptJSONknoten
var jsonObjekt = {};
jsonObjekt.ObjektId = [];
jsonObjekt.Selected = [];
//HilfsJSONknoten
doc = XYZ.GetCurrentDocument();
doc.GetAllObjects(function (objects) {
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
var id = obj.id;
var caption = obj.caption;
var type = obj.type;
var my = obj.my;
console.log("[obj:" + obj + " id:" + id + " caption:" + caption + " type:" + type + " my: " + my + "]");
//liste alle verfuegbaren Objekte auf
jsonObjekt.ObjektId.push(id);
if (type === "Statusbox") {
doc.GetObject(id, function () {
var statusboxInhalt = this.Data.Rows;
var utilJSONObjekt;
for (var j = 0; j < statusboxInhalt.length; j++) {
// make sure to re-initialize so we don't update the same reference
utilJSONObjekt = {};
utilJSONObjekt.SelectedObjektId;
utilJSONObjekt.SelectedObjektWerte = [];
var inhalt = statusboxInhalt[j];
console.log("Name: " + inhalt[0].text + " Wert: " + inhalt[2].text);
utilJSONObjekt.SelectedObjektId = inhalt[0].text;
var valAr = inhalt[2].text.split(",");
for (var k = 0; k < valAr.length; k++) {
utilJSONObjekt.SelectedObjektWerte.push($.trim(valAr[k]));
}
jsonObjekt.Selected.push(utilJSONObjekt);
}
});
}
}
});
$('#txtboxQv').append(JSON.stringify(jsonObjekt));
return jsonObjekt;
}
您可能还有另一个异步调用(GetObject)。我不知道你的代码的其余部分,所以我不能建议如何处理JSONObjEt何时被填充,但希望这给了你足够的方向来解决这个问题。您可能需要重新构建一些东西。谢谢您的回复,我已经更改了代码。但我仍然有问题:在我的函数中,我已经声明了这一点。函数buildJSON();当我将return语句设置为我的JSON对象null时,如果看不到更多的代码就不可能知道(而且在注释中阅读代码非常困难)。也许你可以问另一个问题?谢谢你的提示,你可以在编辑过的问题中看到我的函数。这看起来不错,我想你理解我想做什么,但我的jsonObjekt在返回语句中仍然为空,可能是什么错误,我从我创建的函数中获得了一些数据call@Higune-看来你的问题是GetObjectGetAllObject是异步的,我给出了一个异步调用的例子。
{
"ObjektId": [
"1",
"11",
"111",
"1111"
],
"Selected": [
{
"SelectedObjektId": "555",
"SelectedObjektValues": [
"Test1",
"Test2",
"Test3"
]
},
{
"SelectedObjektId": "112555",
"SelectedObjektValues": [
"11Test1",
"22Test2",
"22Test3"
]
}
]
}
function getJSONObjektList() {
//HauptJSONknoten
var jsonObjekt = {};
jsonObjekt.ObjektId = [];
jsonObjekt.Selected = [];
//HilfsJSONknoten
doc = XYZ.GetCurrentDocument();
doc.GetAllObjects(function (objects) {
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
var id = obj.id;
var caption = obj.caption;
var type = obj.type;
var my = obj.my;
console.log("[obj:" + obj + " id:" + id + " caption:" + caption + " type:" + type + " my: " + my + "]");
//liste alle verfuegbaren Objekte auf
jsonObjekt.ObjektId.push(id);
if (type === "Statusbox") {
doc.GetObject(id, function () {
var statusboxInhalt = this.Data.Rows;
var utilJSONObjekt;
for (var j = 0; j < statusboxInhalt.length; j++) {
// make sure to re-initialize so we don't update the same reference
utilJSONObjekt = {};
utilJSONObjekt.SelectedObjektId;
utilJSONObjekt.SelectedObjektWerte = [];
var inhalt = statusboxInhalt[j];
console.log("Name: " + inhalt[0].text + " Wert: " + inhalt[2].text);
utilJSONObjekt.SelectedObjektId = inhalt[0].text;
var valAr = inhalt[2].text.split(",");
for (var k = 0; k < valAr.length; k++) {
utilJSONObjekt.SelectedObjektWerte.push($.trim(valAr[k]));
}
jsonObjekt.Selected.push(utilJSONObjekt);
}
});
}
}
});
$('#txtboxQv').append(JSON.stringify(jsonObjekt));
return jsonObjekt;
}
function getJSONObjektList(cb) {
var jsonObjekt = {};
...
doc = XYZ.GetCurrentDocument();
doc.GetAllObjects(function (objects) {
// this is likely getting called after the outer function exits
// do your computation here
for (...) {
...
}
$('#txtboxQv').append(JSON.stringify(jsonObjekt));
cb(jsonObjekt);
});
// don't rely on jsonObjekt being populated here; GetAllObjects is probably async
}