我正在将JSON对象读入正常的js对象。有一个名为Style的类可以包含样式(在数组中)并且具有名称和值。一些不同的对象可以包含样式(也作为数组)
现在我创建了一个独立函数,它返回一个样式数组,如下所示:
function getStylesFromJson(jsonObj)
{
this.complete = false;
var ret = new Array();
for (var style in jsonObj)
{
temp = new Style();
temp.loadFromJson(jsonObj[style]);
ret.push(temp);
document.write("xxxxxxx<br/>");
document.write(jsonObj[style].sName);
document.write(jsonObj[style].sValue);
document.write("<br/>");
document.write(temp.name);
document.write(temp.value);
document.write("<br/>yyyyy");
document.write("<br/>");
while (!temp.loadFromJson.complete)
{
var a = 1; //waste some time
}
}
this.complete = true;
return ret;
}
在Style类中我创建了函数:
this.loadFromJson = function(jsonObj)
{
this.loadFromJson.complete = false;
this.name = jsonObj.sName;
this.value = jsonObj.sValue;
this.styles = getStylesFromJson(jsonObj.aStyles);
this.loadFromJson.complete = true;
}
这是一个JSON的snippit,它被执行以使传递给getStylesFromJson的对象:
{
"aStyles": {
"font": {
"sValue": "",
"sName": "font",
"aStyles": {
"size": {
"sValue": "2000000",
"sName": "size",
"aStyles": []
}
}
},
"fill": {
"sValue": "",
"sName": "fill",
"aStyles": {
"bill": {
"sValue": "blue",
"sName": "bill",
"aStyles": []
},
"mill": {
"sValue": "blue",
"sName": "mill",
"aStyles": []
}
}
}
}
}
这里是getStylesFromJson中document.write的输出:
font
colorpurple
yyyyy
xxxxxxx
colorred
colorred
yyyyy
xxxxxxx
fill
colorred
yyyyy
xxxxxxx
size12
size12
yyyyy
我想要的是从json构造一个完整的对象层次结构,但它似乎忽略了结构的顶层。我没有得到任何js错误,只是像“字体”和“填充”这样的东西被遗漏了,我不知道为什么。
任何想法?
以下是评论者的更多信息: 我确实使用过JSON.parse,但据我所知,没有办法解析某些东西,以确保它最终成为其他地方指定的类的自定义对象。我需要获取一个JSON字符串,而不是包含一个递归数据结构,并将其转换为具有某些功能的对象层次结构。有没有办法做到这一点?
这里有一些关于单词和x和y东西含义的解释: 一个名为jsonObj的jsonised对象被传递给一个函数,然后使用jsonObj创建一个Style。 “xxxxx”标记单次迭代输出的开始。输出JSON样式的下一个名称和值(无空格)。该值可以为空。接下来输出从JSON样式信息构造的Style的名称和值。它应该是相同的但不是。
xxxx
colorpurple
colorpurple
yyyy
意味着正确构造名称“颜色”和紫色值
xxxx
fill
colorred
yyyy
让我沮丧