?var result = { ??????"Tables":{ ??????????"B2B_DS_ORDERMX0":{ ??????????????"ordernum":"tables-0[0] 未定,int,10", ??????????}, ??????????"B2B_DS_ORDERHZ1":{ ??????????????"ordernum":"tables-1[0] 未定,int,10", ??????????????"hasChild":{"type":"tables-1[1]","value":"12"} ??????????} ??????}, ??????"Json":{ ??????????"_id" : "Json-0[0]订单ID,objectid,32", ??????????"goodsList" : ??????????{ ??????????????"goodsId" : "Json-1[0]未定,int,10" ??????????} ??????} ??}
以上result为一段json格式代码,要求:分别输出Tables和Json,若Tables和Json有子集,则要包含字段"expanded":true,"children":[子集],一直循环到无子集则包含字段"leaf":true,一开始无子集,则直接"leaf":true
思路分析:
for/in 语句循环遍历对象的属性。
js中获取key得到某对象中相对应的value的方法:obj.key
js中根据动态key得到某对象中相对应的value
对象的属性值存在子集,若为数组/对象,则typeof == "object",若不存在子集,则为字符串typeof == "string",所以只要通过循环判断对象属性值的类型,即可知道是否存在子集
解决方法:
1 ?function makearr(jsonarr){ 2 ????????let arr = []; 3 ?4 ????????for(let i in jsonarr){ 5 ??????????// ??console.log(jsonarr[i]); 6 ?7 ????????????if(typeof jsonarr[i] == "object"){ 8 ????????????????var ret = { 9 ????????????????????"text":i,10 ????????????????????"expanded":true,11 ????????????????????"field":i12 ????????????????};13 ????????????????ret.children = makearr(jsonarr[i]);14 15 ????????????}else{16 ????????????????let _arr = jsonarr[i].split(",");17 ????????????????var ret = {18 ????????????????????"text":i,19 ????????????????????"leaf":true,20 ????????????????????"field":i21 ????????????????};22 ????????????}23 ????????????arr.push(ret);24 ????????}25 26 ????????return arr;27 ????}28 29 30 var _arr1 = makearr(result.Tables);31 console.log(_arr1);32 var _arr2 = makearr(result.Json);33 console.log(_arr2);
输出结果:
for...in循环取Json数据
原文地址:https://www.cnblogs.com/ss977/p/8545259.html