2016-05-11 2 views
0

Lösung:wie kann ich den Wert „__type“ Schlüssel in einem json mit Javascript

ich das Problem gefunden, ist, dass Stift Parser die Funktion toJSON umschreiben, so dass, obwohl der ast Druck wie folgt, aber eigentlich ast Objekt Habe keine __type Eigenschaft, also verursacht es das Problem.


Frage:

Ich bin mit Stift ast Baum, der wie ist:

{ 
"__type": "Root", 
"nodes": [ 
    { 
    "__type": "Ident", 
    "name": "some-mixin", 
    "val": { 
     "__type": "Function", 
     "name": "some-mixin", 
     "lineno": 1, 
     "column": 16, 
     "params": { 
     "__type": "Params", 
     "nodes": [ 
      { 
      "__type": "Ident", 
      "name": "a", 
      "val": { 
       "__type": "Null" 
      }, 
      "mixin": false, 
      "lineno": 1, 
      "column": 12 
      }, 
      ... 

es ist ein Baum von json ausgedrückt.

und ich möchte den Wert von "__type" erhalten, aber mit ["__type"], um den Wert zu erhalten, undefined wird zurückgegeben.

es scheint, als hätte "__type" eine besondere Bedeutung in json, wie kann ich den Wert von "__type" bekommen?

PS: Ich versuchte object.__type, um den Wert zu erhalten, es funktioniert nicht.

Außerdem fand ich einige seltsame Sache

typeof ast // returns object 

Ich benutze JSON.stringify (ast) und __type ist im String Aber ich benutze console.log (ast), __type fehlt, I weiß nicht, warum ..

Und auch habe ich versucht,

console.log(ast.hasOwnProperty('__type')) //return false 

PPS: ich habe diesen Code in Knoten v0.12.0 laufen

Danke für Ihre Hilfe!

+0

das sieht eher wie ein Javascript-Objekt mit einem eigenen Eigenschaften, haben Sie versucht, die Punktnotation 'Objekt .__ Baumuster zur? – madalinivascu

+0

Scheint gut: https://jsfiddle.net/sypx3tom/ –

+0

'__type' hat keine besondere Bedeutung oder Einschränkungen. Sie können darauf wie jede andere Eigenschaft zugreifen. –

Antwort

0

"__type" wird von JavaScript in keiner Weise speziell erkannt. Stellen Sie sicher, dass der AST für ein Objekt analysiert wurde. Wenn es immer noch eine JSON-Zeichenfolge ist, erhalten Sie undefined. Sie können absolut sicher sein, indem Sie den Operator typeof auf Ihrem AST verwenden. Es sollte "Objekt" und nicht "String" zurückgeben. Wenn seine "Zeichenfolge" dann müssen Sie JSON.parse verwenden.

0

könnten Sie Punktnotation versuchen:

var x = {"__type": "Ident"}; 

console.log(x['__type']); // with 'string' 
console.log(x.__type); // with 'dot' 
0

es nichts Besonderes "__type" in JS ist. Ich würde trotzig den Typ testen, um sicherzustellen, dass Sie mit einem Objekt zu tun haben. Hat Ihr JSON-Objekt einen Namen? Sie können dies auch versuchen, um das erste Objekt zu testen.

nameOfYourObject['__type'] 

// if there are more than one 
nameOfYourObject[0]['__type'] 

oder wenn Sie in das Objekt erreichen:

nameOfYourObject.nodes[0]['__type'] 

// if there are more than one 
nameOfYourObject[0].nodes[0]['__type'] 
Verwandte Themen