日期:2014-05-16  浏览次数:20346 次

json节点问题
本帖最后由 u013156418 于 2014-01-05 23:18:07 编辑
怎么判断json元素是相对于根的子节点还是孙子节点?
json={
'students':{
   'student':{
   'name':'zhangsan',
   'age',11,
   'address':{
       'city':'beijing'
   }
 }
}

怎么判断student是子节点,name是孙子节点,city是曾孙节点?

------解决方案--------------------
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即可生成值类型[数组也被包含在内,生成连接符为,的字符