javascript JSON解析

javascript JSON解析,javascript,json,parsing,recursion,Javascript,Json,Parsing,Recursion,我正在使用这个JSON,试图获取所有的键和值。我的问题是,在某些情况下,内部对象中有更多的键和值 这只能在JavaScript中递归完成吗?我错过了什么 { "@xmlns:v6": "urn://oracle.bi.webservices/v6", "v6:pageID": "?", "v6:reportID": "?", "v6:report": { "v6:reportPath": "?", "v6:reportXml": "?" }, "v6:re

我正在使用这个JSON,试图获取所有的键和值。我的问题是,在某些情况下,内部对象中有更多的键和值

这只能在JavaScript中递归完成吗?我错过了什么

{
  "@xmlns:v6": "urn://oracle.bi.webservices/v6",
  "v6:pageID": "?",
  "v6:reportID": "?",
  "v6:report": {
    "v6:reportPath": "?",
    "v6:reportXml": "?"
  },
  "v6:reportViewName": "?",
  "v6:reportParams": {
    "comment": [
      "Zero or more repetitions: ",
      "Zero or more repetitions: ",
      "Zero or more repetitions: ",
      "Zero or more repetitions: ",
      "Optional: "
    ],
    "v6:filterExpressions": "?",
    "v6:variables": {
      "v6:name": "?",
      "v6:value": "?"
    },
    "v6:nameValues": {
      "v6:name": "?",
      "v6:value": "?"
    },
    "v6:templateInfos": {
      "v6:templateForEach": "?",
      "v6:templateIterator": "?",
      "comment": "Zero or more repetitions: ",
      "v6:instance": {
        "v6:instanceName": "?",
        "comment": "Zero or more repetitions: ",
        "v6:nameValues": {
          "v6:name": "?",
          "v6:value": "?"
        }
      }
    },
    "v6:viewName": "?"
  },
  "v6:options": {
    "v6:enableDelayLoading": "?",
    "v6:linkMode": "?"
  },
  "v6:sessionID": "?"
}
以下是我尝试使用的代码:

    function parse(data,child,parent){
    var nextRept = false;
        if(child){  
        for(var i = 0; i < tmp.parents.length ; i++){
            if(tmp.parents[i].name == parent){
                if(!tmp.parents[i].children)
                    tmp.parents[i].children = [];
                var keys = Object.keys(data);
                for (var k = 0; k < keys.length; k++) {
                var val = data[keys[k]];
                if(typeof val === 'object')
                {
                 tmp.parents.push({name: keys[k].replace("v6:","")} ); //adding the parent
                 parse(val,true,keys[k].replace("v6:","")); // adding children recursively 
                }
                if(val == '?')
                { // handle valid param
                    var attr = false;
                    if(keys[k].indexOf('@') == 0){
                        attr = true;
                        keys[k] = keys[k].replace("@","");
                    }
                    tmp.parents[i].children.push({name: keys[k].replace("v6:","") , value : val , isAttr : attr , isRepet : nextRept});
                    isRepet = false;
                }
                }
                return;
            }

        }
            return;
        }

        var keys = Object.keys(data);
        for (var i = 0; i < keys.length; i++) {
            var val = data[keys[i]];
            if(typeof val === 'object')
                {
                 tmp.parents.push({name: keys[i].replace("v6:","")} ); //adding the parent
                 parse(val,true,keys[i].replace("v6:","")); // adding children recursively 
                }
                else{

                if(val.indexOf('Zero or more repetitions') != -1){
                    nextRept = true;
                    continue;
                }
                if(val == '?')
                { // handle valid param
                    var attr = false;
                    if(keys[i].indexOf('@') == 0){
                        attr = "true";
                        keys[i] = keys[i].replace("@","");
                    }
                    else{
                        attr = false;
                    }
                    tmp.parents.push({name: keys[i].replace("v6:","").replace("@","") , value : val , isAttr : attr , isRepet : nextRept});
                    isRepet = false;
                }


                }
            }

    };
函数解析(数据、子、父){
var nextRept=false;
如果(儿童){
对于(var i=0;i
我写得很快,但在这种情况下应该有用。(通过对象/数组/字符串进行迭代)

var obj={
“项目”:“价值”,
“项目2”:[“价值1”、“价值2”、“价值3”],
“项目3”:{“项目3-1”:[“项目3-1-1”、“项目3-1-2”、“项目3-1-3”],“项目3-2”:{“morestuff”:[“morestuff1”、“morestuff2”、“morestuff3”]}
}
函数解析对象(obj){
for(obj中的var键){
if(对象hasOwnProperty(键)){
var项目=对象[键];
如果(项目类型=='string'){
console.log(key+'->'+obj[key]);
}否则{
console.log(键+'->');
分析对象(项);
}
}
}
}
parseObject(obj);
结果:

项目->价值
项目2->
0->值1
1->值2
2->值3
项目3->
第3-1项->
0->item3-1-1
1->3-1-2项
2->3-1-3项
第3-2项->
更多信息->
0->更多信息1
1->更多信息2
2->更多信息3

您丢失了。。。密码。到目前为止,你尝试了什么?或者,与其说你尝试了什么,不如说你正在尝试做什么?你还没有告诉我们,那么我们怎么告诉你怎么做呢?我已经添加了一个小代码示例(还没有递归解决方案)我试图将所有这些json放入具有相同层次结构的数组中,这意味着,如果它有子数组,它们将位于子数组中,等等..我还添加了我当前使用的完整解析代码,这起到了一半的作用。。。如果级别变深(包含数组等的对象),递归将无法正常工作:/Thank Shai!它给了我正确的思考方向!