2016-04-07 7 views
0

Ich habe Probleme beim Konvertieren von Objekten in JSON. Ich erstelle eine eckige Web-App.Objekt stringify to JSON (wirft Fehler)

Unten ist die json die ich Objekt konvertiert:

var array = { 
    "game": [{ 
     "Time (magazine)": [{ 
      "AARP Bulletin": [] 
     }, { 
      "AARP The Magazine": [] 
     }] 
    }, { 
     "Ludwig Wittgenstein": [{ 
      "Wittgenstein": [] 
     }, { 
      "20th century philosophy": [{ 
       "16th-century philosophy": [{ 
        "19th-century philosophy": [] 
       }] 
      }, { 
       "17th-century philosophy": [] 
      }] 
     }] 
    }] 
}; 

und verwendet, um dieses Verfahren zu bevorzugten json Struktur zu konvertieren:

function restyle(obj) { 
    Object.keys(obj).forEach(function (k) { 
    obj.name = k; 
    obj.child = obj[k]; 
    delete obj[k]; 
    obj.child.forEach(restyle); 
    }); 
}; 

Wenn jedoch habe ich versucht das Array Variable Konsolprotokoll nach Durchlaufen der Restyle-Methode. I M die Störung zu erhalten

TypeError: Converting circular structure to JSON

ich versuchte JSON.stringfy (Array) verwendet wird. Derselbe Fehler wird angezeigt.

+1

haben Sie versucht, jSON()? Oder umgekehrt JSON.parse (jsonString); –

+1

Also ... Sie erstellen einen Zirkelverweis. Verwenden Sie einen Debugger (in Ihrem Browser ist ein solcher enthalten), um durch den Code zu gehen und zu sehen, wie Sie das machen. Zunächst einmal ist es fast sicher falsch, das Objekt "obj.child" ständig zu überschreiben. –

+0

@MarcRasmussen: Das OP erstellt eine neue Objektstruktur. Es ist * das *, das sie dann zu JSON konvertieren - was fehlschlägt, weil sie einen Zirkelverweis erstellt haben. –

Antwort

0

Ich habe versucht, den Code als in Firebug Konsole folgenden ausgeführt wird wie die folgenden, und es funktioniert für mich:

function restyle(obj) { 
    Object.keys(obj).forEach(function (k) { 
    obj.name = k; 
    obj.child = obj[k]; 
    delete obj[k]; 
    obj.child.forEach(restyle); 
    }); 
}; 

var array = { 
    "game": [{ 
     "Time (magazine)": [{ 
      "AARP Bulletin": [] 
     }, { 
      "AARP The Magazine": [] 
     }] 
    }, { 
     "Ludwig Wittgenstein": [{ 
      "Wittgenstein": [] 
     }, { 
      "20th century philosophy": [{ 
       "16th-century philosophy": [{ 
        "19th-century philosophy": [] 
       }] 
      }, { 
       "17th-century philosophy": [] 
      }] 
     }] 
    }] 
}; 

restyle(array); 
console.log(JSON.stringify(array)); 

ich folgendes als Konsole Ausgabe:

{"name":"game","child":[{"name":"Time (magazine)","child":[{"name":"AARP Bulletin","child":[]},{"name":"AARP The Magazine","child":[]}]},{"name":"Ludwig Wittgenstein","child":[{"name":"Wittgenstein","child":[]},{"name":"20th century philosophy","child":[{"name":"16th-century philosophy","child":[{"name":"19th-century philosophy","child":[]}]},{"name":"17th-century philosophy","child":[]}]}]}]} 

Ist das was versuchst du zu tun?

Verwandte Themen