第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解決來自JSON對象的循環(huán)引用

解決來自JSON對象的循環(huán)引用

慕俠2389804 2019-11-18 14:57:09
如果我從json.net獲得序列化的JSON,如下所示:User:{id:1,{Foo{id:1,prop:1}},FooList{$ref: "1",Foo{id:2,prop:13}}我想讓淘汰賽在FooList上輸出foreach,但是我不確定如何繼續(xù),因為$ ref東西可能會拋出東西。我在想解決方案將以某種方式通過不使用以下方式強制將所有Foos呈現(xiàn)在FooList中:PreserveReferencesHandling = PreserveReferencesHandling.Objects但這似乎很浪費。
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

您從服務(wù)器接收的json對象包含循環(huán)引用。在使用該對象之前,您必須首先$ref從該對象中刪除所有屬性,這意味著$ref : "1"必須放置該鏈接指向的對象來代替該對象。


您的情況可能是指向ID為1的用戶對象


為此,您應(yīng)該在github上查看Douglas Crockfords插件。有一個cycle.js可以為您完成工作。


或者您可以使用以下代碼(未經(jīng)測試):


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;

}  

讓我知道是否有幫助!


查看完整回答
反對 回復(fù) 2019-11-18
?
小怪獸愛吃肉

TA貢獻1852條經(jīng)驗 獲得超1個贊

如果您利用JSON.parse的reviver參數(shù),這實際上非常簡單。


下面的例子。請參閱瀏覽器控制臺以獲取輸出,因為StackOverflow的代碼段控制臺輸出將無法提供有關(guān)結(jié)果的準確圖片。


// example JSON

var j = '{"$id":"0","name":"Parent","child":{"$id":"1", "name":"Child","parent":{"$ref":"0"}},"nullValue":null}'


function parseAndResolve(json) {

    var refMap = {};


    return JSON.parse(json, function (key, value) {

        if (key === '$id') { 

            refMap[value] = this;

            // return undefined so that the property is deleted

            return void(0);

        }


        if (value && value.$ref) { return refMap[value.$ref]; }


        return value; 

    });

}


console.log(parseAndResolve(j));


查看完整回答
反對 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 1239 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號