在使用fastjson时的循环引用导致前端解析json出现问题

在使用fastjson时的循环引用导致前端解析json出现问题

循环引用意思是a对象中有b对象,b对象中有a对象,json如果要完整表达这种数据结构会字符串将会无穷大,所以fastjson处理方式是将重复的内容使用引用
例如
{
	code:0 ,
	msg:"ok" ,
	data:[
		{a:100 , b:200 , c:{m:50 , n:100 }} ,
		{"$ref":"$.data[0].c"}
	]
}
上面是问题json,使用下面的函数即可解决这种问题
var json = (function(){
    var parse = function(obj) {
        for(var i in obj) {
            obj[i] = into(obj , obj , i)
        }
     	return obj ;
    }

    var into = function(root , obj , k) {
        if(typeof(obj[k]) == "object") {
            for(var i in obj[k]) {
                if(i == "$ref") {
                    obj[k] = into(root , obj[k] , i)
                }else{
                    obj[k][i] = into(root , obj[k] , i)
                }
            }
            return obj[k] 
        }
        if(typeof(obj[k]) == "string") { 
            if(obj[k].startsWith("$.")) {
                var res = eval("root."+obj[k].substr(2))
                obj[k] = res
                return obj[k]
            }else if(obj[k].startsWith("$[")){
				var res = eval("root"+obj[k].substr(1))
                obj[k] = res
                return obj[k]
			}
            return obj[k]
        }
        return obj[k]
    }  

    return {parse:parse} ;
})()
简单验证一下
console.log(json.parse({
	code:0 ,
	msg:"ok" ,
	data:[
		{a:100 , b:200 , c:{m:50 , n:100 }} ,
		{"$ref":"$.data[0].c"}
	]
}))
打印结果是
{
	"code": 0,
	"msg": "ok",
	"data": [{
		"a": 100,
		"b": 200,
		"c": {
			"m": 50,
			"n": 100
		}
	}, {
		"m": 50,
		"n": 100
	}]
}

问题已经解决

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值