栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解决JSON对象的循环引用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决JSON对象的循环引用

从服务器接收的json对象包含循环引用。在使用对象之前,您必须首先
$ref
从对象中删除所有属性,这意味着`$ref
“1”`必须放置此链接指向的对象来代替您。

在您的情况下,它可能指向id为1的User对象

为此,您应该在github上查看DouglasCrockfords插件。有一个cycle.js可以为您完成工作。

或者您可以使用以下代码(未经测试):

function resolveReferences(json) {    if (typeof json === 'string')        json = JSON.parse(json);    var byid = {}, // all objects by id        refs = []; // references to objects that could not be resolved    json = (function recurse(obj, prop, parent) {        if (typeof obj !== 'object' || !obj) // a primitive value return obj;        if ("$ref" in obj) { // a reference var ref = obj.$ref; if (ref in byid)     return byid[ref]; // else we have to make it lazy: refs.push([parent, prop, ref]); return;        } else if ("$id" in obj) { var id = obj.$id; delete obj.$id; if ("$values" in obj) // an array     obj = obj.$values.map(recurse); else // a plain object     for (var prop in obj)         obj[prop] = recurse(obj[prop], prop, obj) byid[id] = obj;        }        return obj;    })(json); // run it!    for (var i=0; i<refs.length; i++) { // resolve previously unknown references        var ref = refs[i];        ref[0][ref[1]] = byid[refs[2]];        // Notice that this throws if you put in a reference at top-level    }    return json;}

让我知道是否有帮助!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号