json节点问题 本帖最后由 u013156418 于 2014-01-05 23:18:07 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想得到准确的层次关系,比如值为"beijing"的准确层次是students.student.address.city 自己统计下吧。JQ的$.EACH写个方法循环统计下var strjson=....;$.each(strjson,function(a,a_item){ alert(a+":"+a_item);})这个瞧瞧 声明个变量 记录下父元素(这里的a) 不断循环这个就OK了。。 。。 再用$.each 中间加个判断就好。。$.each(strjson,function(a,a_item){ if(a_item.length>1) { $.each(a_item,function(b,b_item){ alert(b+":"+b_item); }) }})具体咋写你自个改改就好。。 还是不明白,小菜鸟别见怪!是不是用迭代会好一点?比如:json类似于这样的var json={ "name":"zhansan", "age":23, "address":{ "city":"beijing", "year":["气态流出物月报",0,1], "gas":{ "gasSheet":"气态流出物月报", "H_adjust":1, "employer":{ "midle":"sizhong", "hight":"sizhong" } }, "time":{ "year": ["气态流出物月报",0,1], "start":[1,"~"], "duration":31, "employer":{ "midle":"sizhong", "hight":"sizhong" } } }, "student":[13,"s1","s2"], "units":{"title":"function"} //怎么判断它是相对于根的子节点?}我要得到它的所有值对应的层次,比如“function”对应的是json.units.title,...怎么做? function _type(obj){ /// <summary> /// 返回数据类型的小写副本 /// </summary> /// <param name="obj">目标对象</param> /// <returns>目标对象的数据类型的小写副本:string,date,number,array,boolean,object,regexp,function...</returns> return Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1].toLowerCase();}function getNS(ns,json,named){ var keyNamed; for(var key in json){ if(json.hasOwnProperty(key)){ keyNamed = named + '.' + key; if(_type(json[key])=='object'){ ns[keyNamed] = '{}';//如果不想保留非值类型的结构,删除这句 getNS(ns,json[key],keyNamed); }else{ ns[keyNamed] = _type(json[key])=='array' ? json[key].join(',') : json[key]; }; } }; return ns;};var ns=getNS({},json,"json");还是没搞明白这个是做什么用的,能说下么?上面的ns即可生成值类型[数组也被包含在内,生成连接符为,的字符串]的结构描述,这东东要是碰上两个值相同的,上哪查去呀以你的例子来说,ns结构为:ns={ "json.name": "zhansan", "json.age": 23, "json.address": "{}", "json.address.city": "beijing", "json.address.year": "气态流出物月报,0,1", "json.address.gas": "{}", "json.address.gas.gasSheet": "气态流出物月报", "json.address.gas.H_adjust": 1, "json.address.gas.employer": "{}", "json.address.gas.employer.midle": "sizhong", "json.address.gas.employer.hight": "sizhong", "json.address.time": "{}", "json.address.time.year": "气态流出物月报,0,1", "json.address.time.start": "1,~", "json.address.time.duration": 31, "json.address.time.employer": "{}", "json.address.time.employer.midle": "sizhong", "json.address.time.employer.hight": "sizhong", "json.student": "13,s1,s2", "json.units": "{}", "json.units.title": "function"} 是这样的,我说一下大概流程吧:1.打开一个xml文件——>2.解析xml成json生成树形菜单——>3.对树形菜单进行操作(添加、删除、修改),但这些操作一般是基于student.address.city...这种格式的,所以首先的获取到一个值得准确节点层次,然后才能操作它。请问您这ns结构是怎么做得?我需要的就是这个啊! 如果真有此必要的话,你完全可以在第二步:解析xml成json生成树形菜单的时候,将其"层级"附加至要操作的对象之上;但个人感觉你这是走了弯路了,应该有更好更直接的方法. 大神,我用你的方法试了一下,是可以的,非常感谢,但是我做了小改动,发现了一个问题:之前的模式都是对象里面包含数组,那如果是数组里面有对象,似乎就不准确了,根据你的代码,我改完如下:function getNodes(json,named){ var keyName; for(var key in json){ keyName = named + "." + key; if(_type(json[key]) == "object"){ getNodes(json[key],keyName); }else{ if(_type(json[key]) == "array"){ for(var i=0;i<json[key].length;i++){ keyName = named+"."+key+"["+i+"]"; document.write(keyName+"</br>"); } }else{ document.write(keyName+"</br>"); } } } }function del(){ getNodes(json,"Root"); }能不能麻烦大神帮我看一下问题在哪?谢谢了,马上结贴给分,分不多,对不住了 解析是在后台java解析的,就是子前台打开xml文件,获取文件里面的文本内容,然后提交给后台,后台解析完了以后返回json数据给前台,前台根据返回json数据生成树形菜单。有点绕,我也感觉似乎一开始就想错了 if (_type(json[key][i]) == "object") {//加多个判断 getNodes(json[key][i], keyName);} else { document.write(keyName + "</br>");}var json={ "name":"zhansan", "age":23, "address":{ "city":"beijing", "year":["气态流出物月报",{a:1,b:"xx"},1], "gas":{ "gasSheet":"气态流出物月报", "H_adjust":1, "employer":{ "midle":"sizhong", "hight":"sizhong" } }, "time":{ "year": ["气态流出物月报",0,1], "start":[1,"~"], "duration":31, "employer":{ "midle":"sizhong", "hight":"sizhong" } } }, "student":[13,"s1","s2"], "units":{"title":"function"} //怎么判断它是相对于根的子节点? }输出:json.namejson.agejson.address.cityjson.address.year[0]json.address.year[1].ajson.address.year[1].bjson.address.year[2]json.address.gas.gasSheetjson.address.gas.H_adjustjson.address.gas.employer.midlejson.address.gas.employer.hightjson.address.time.year[0]json.address.time.year[1]json.address.time.year[2]json.address.time.start[0]json.address.time.start[1]json.address.time.durationjson.address.time.employer.midlejson.address.time.employer.hightjson.student[0]json.student[1]json.student[2]json.units.title javascript浏览器验证不准确 javascript+jquery电子书 求人修改网页悬浮框代码 javascript习题 这段代码在IE8出错和Firefox3.6正常问题(主流全浏览器测试问题) select联动,写的代码有些不对 JavaWeb点对点聊天 让文本域里边按"Enter"键变成换行键 50分全上了,谁帮我看看这段代码呀(主要问题出在参数的定义上) 关于层的问题 弱弱的问一下,js如何获取当前项目的根路径? javascript写的字符串加密程序,用if判断程序正常,用switch出错
var strjson=....;
$.each(strjson,function(a,a_item){
alert(a+":"+a_item);
})
这个瞧瞧 声明个变量 记录下父元素(这里的a) 不断循环这个就OK了。。
$.each(strjson,function(a,a_item){
if(a_item.length>1)
{
$.each(a_item,function(b,b_item){
alert(b+":"+b_item);
})
}
})具体咋写你自个改改就好。。
比如:json类似于这样的
var json={
"name":"zhansan",
"age":23,
"address":{
"city":"beijing",
"year":["气态流出物月报",0,1],
"gas":{
"gasSheet":"气态流出物月报",
"H_adjust":1,
"employer":{
"midle":"sizhong",
"hight":"sizhong"
}
},
"time":{
"year": ["气态流出物月报",0,1],
"start":[1,"~"],
"duration":31,
"employer":{
"midle":"sizhong",
"hight":"sizhong"
}
}
},
"student":[13,"s1","s2"],
"units":{"title":"function"} //怎么判断它是相对于根的子节点?
}
我要得到它的所有值对应的层次,比如“function”对应的是json.units.title,...怎么做?
/// <summary>
/// 返回数据类型的小写副本
/// </summary>
/// <param name="obj">目标对象</param>
/// <returns>目标对象的数据类型的小写副本:string,date,number,array,boolean,object,regexp,function...</returns>
return Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1].toLowerCase();
}
function getNS(ns,json,named){
var keyNamed;
for(var key in json){
if(json.hasOwnProperty(key)){
keyNamed = named + '.' + key;
if(_type(json[key])=='object'){
ns[keyNamed] = '{}';//如果不想保留非值类型的结构,删除这句
getNS(ns,json[key],keyNamed);
}else{
ns[keyNamed] = _type(json[key])=='array'
? json[key].join(',')
: json[key];
};
}
};
return ns;
};
var ns=getNS({},json,"json");
还是没搞明白这个是做什么用的,能说下么?
上面的ns即可生成值类型[数组也被包含在内,生成连接符为,的字符串]的结构描述,这东东要是碰上两个值相同的,上哪查去呀以你的例子来说,ns结构为:
ns={
"json.name": "zhansan",
"json.age": 23,
"json.address": "{}",
"json.address.city": "beijing",
"json.address.year": "气态流出物月报,0,1",
"json.address.gas": "{}",
"json.address.gas.gasSheet": "气态流出物月报",
"json.address.gas.H_adjust": 1,
"json.address.gas.employer": "{}",
"json.address.gas.employer.midle": "sizhong",
"json.address.gas.employer.hight": "sizhong",
"json.address.time": "{}",
"json.address.time.year": "气态流出物月报,0,1",
"json.address.time.start": "1,~",
"json.address.time.duration": 31,
"json.address.time.employer": "{}",
"json.address.time.employer.midle": "sizhong",
"json.address.time.employer.hight": "sizhong",
"json.student": "13,s1,s2",
"json.units": "{}",
"json.units.title": "function"
}
请问您这ns结构是怎么做得?我需要的就是这个啊!
var keyName;
for(var key in json){
keyName = named + "." + key;
if(_type(json[key]) == "object"){
getNodes(json[key],keyName);
}else{
if(_type(json[key]) == "array"){
for(var i=0;i<json[key].length;i++){
keyName = named+"."+key+"["+i+"]";
document.write(keyName+"</br>");
}
}else{
document.write(keyName+"</br>");
}
}
}
}function del(){
getNodes(json,"Root");
}
能不能麻烦大神帮我看一下问题在哪?谢谢了,马上结贴给分,分不多,对不住了
if (_type(json[key][i]) == "object") {//加多个判断
getNodes(json[key][i], keyName);
} else {
document.write(keyName + "</br>");
}
var json={
"name":"zhansan",
"age":23,
"address":{
"city":"beijing",
"year":["气态流出物月报",{a:1,b:"xx"},1],
"gas":{
"gasSheet":"气态流出物月报",
"H_adjust":1,
"employer":{
"midle":"sizhong",
"hight":"sizhong"
}
},
"time":{
"year": ["气态流出物月报",0,1],
"start":[1,"~"],
"duration":31,
"employer":{
"midle":"sizhong",
"hight":"sizhong"
}
}
},
"student":[13,"s1","s2"],
"units":{"title":"function"} //怎么判断它是相对于根的子节点?
}
输出:
json.name
json.age
json.address.city
json.address.year[0]
json.address.year[1].a
json.address.year[1].b
json.address.year[2]
json.address.gas.gasSheet
json.address.gas.H_adjust
json.address.gas.employer.midle
json.address.gas.employer.hight
json.address.time.year[0]
json.address.time.year[1]
json.address.time.year[2]
json.address.time.start[0]
json.address.time.start[1]
json.address.time.duration
json.address.time.employer.midle
json.address.time.employer.hight
json.student[0]
json.student[1]
json.student[2]
json.units.title