我正在开展一个小项目。 我坚持一个小js问题。 我有json字符串,如:
var jsObj = {
"templates": {
"form0": {
"ID": "MyAlertNew",
"isVisible": "true",
"children": [
{
"-type": "kButton3",
"ID": "myButtonID1",
"isVisible": "true",
"onClick": "onClickMethod",
"paddings": {
"left": "0",
"right": "0",
"top": "3",
"bottom": "3",
"unit": "%"
},
"text": "dynamic text in file"
},
{
"-type": "kButton1",
"ID": "btnAlign2",
"visible": "true",
"margins": {
"left": "0",
"right": "0",
"top": "0",
"bottom": "0",
"unit": "%"
}
}
]
},
"form1": {
"ID": "frmNewPOC1",
"isVisible": "true",
"children": [
{
"-type": "kButton3",
"ID": "btnAlign",
"isVisible": "true",
"onClick": "onClickMethod",
"paddings": {
"left": "0",
"right": "0",
"top": "3",
"bottom": "3",
"unit": "%"
},
"text": "in diff form"
},
{
"-type": "kButton1",
"ID": "btnAlignTest",
"visible": "true",
"margins": {
"left": "0",
"right": "0",
"top": "0",
"bottom": "0",
"unit": "%"
},
"text": "in My Form"
}
]
}
}
};
我想过滤它:
objnew ={
"MyAlertNew":{
"isVisible": "true"
},
"myButtonID1":{
"isVisible": "true",
"onClick": "onClickMethod",
"paddings": {
"left": "0",
"right": "0",
"top": "3",
"bottom": "3",
"unit": "%"
},
"text": "dynamic text in file"
},
"btnAlign2":{
"visible": "true",
"margins": {
"left": "0",
"right": "0",
"top": "0",
"bottom": "0",
"unit": "%"
}
},
"frmNewPOC1":{
"isVisible": "true"
},
"btnAlign":{
"isVisible": "true",
"onClick": "onClickMethod",
"paddings": {
"left": "0",
"right": "0",
"top": "3",
"bottom": "3",
"unit": "%"
},
"text": "in diff form"
},
"btnAlignTest":{
"visible": "true",
"margins": {
"left": "0",
"right": "0",
"top": "0",
"bottom": "0",
"unit": "%"
},
"text": "in My Form"
}
}
到目前为止,我已尝试使用以下代码,但我获得了成功。
testObj = jsObj.templates;
var idObj = [];
var widgetProp =[];
var ID ;
function parseMyObj(testObj){
for(x in testObj){
if(typeof testObj[x] == "object"){
//widgetProp[]
parseMyObj(testObj[x]);
}
else if(x=='ID'){
ID = testObj[x];
idObj.push(testObj[x]);
}
else{
widgetProp.push(x:testObj[x]);
}
}
}
parseMyObj(testObj);
console.log(widgetProp);
console.log(JSON.stringify(idObj));
请事先帮助我。
答案 0 :(得分:1)
嗯,一个简单的算法(假设密钥名称ID
和children
不会改变)
N
O
的键和值
O
成为此对象,然后转到2. children
,则对于每个孩子,让O
成为孩子并转到2。ID
name
成为此密钥的值X
。O
的所有键和值复制到X
除ID
和children.
name
N
这是上述算法的一个简单实现(尽管不灵活)。
var createdFormattedObject = function(baseObject, formattedObject) {
formattedObject = formattedObject || {};
for(var key in baseObject) {
if(!baseObject.hasOwnProperty(key)) {
continue;
}
var value = baseObject[key];
if(key === "ID") {
formattedObject[value] = {};
for(var k in baseObject) {
if(k !== "ID" && k !== "children") {
formattedObject[value][k] = baseObject[k];
}
}
} else if(key === "children") {
for(var i = 0; i < value.length; i++) {
createdFormattedObject(value[i], formattedObject);
}
} else if(value instanceof Object) {
createdFormattedObject(value, formattedObject);
}
}
return formattedObject;
};
请注意,第二个参数仅对递归有用,在调用函数时不是必需的。