2016-05-11 82 views
0

解决方案:怎样才能得到“__type”键的值与一个json的JavaScript

我发现这个问题,那就是手写笔分析器重写功能的toJSON,所以虽然AST打印类似以下,但实际上AST对象没有__type属性,所以会导致问题。


问:

我使用手写笔AST树是这样的:

{ 
"__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 
      }, 
      ... 

它通过JSON表示一棵树。

我想获得“__type”的值,但使用[“__type”]来获取值,undefined被返回。

好像“__type”在json中有一些特殊的含义,我怎么才能得到“__type”的值?

PS: 我试过object.__type得到的值,它不起作用。

另外,我发现了一些奇怪的事情

typeof ast // returns object 

我使用JSON.stringify(AST)和__type是字符串 的但是我用的console.log(AST),__type丢失,我不知道为什么..

而且还我想

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

PPS:我在节点v0.12.0运行这段代码

感谢您的帮助!

+0

,这看起来更像是私人性质的JavaScript对象,你尝试过点符号'对象.__ type'? – madalinivascu

+0

似乎很好:https://jsfiddle.net/sypx3tom/ –

+0

'__type'没有特别的含义或限制。您可以像访问其他任何资源一样访问它。 –

回答

0

“__type”没有被JavaScript特别识别。验证AST是否已被解析为对象。如果它仍然是JSON字符串,则会得到undefined。您可以绝对确定在AST上使用typeof运算符。它应该返回“对象”而不是“字符串”。如果它的“字符串”,那么你必须使用JSON.parse

0

你可以尝试点符号:

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

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

没有什么特别之处JS “__type”。我会挑衅地测试这种类型以确保你正在处理一个对象。你的JSON对象是否有名字?你也可以试试这个来测试第一个对象。

nameOfYourObject['__type'] 

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

,或者如果你深入到对象:

nameOfYourObject.nodes[0]['__type'] 

// if there are more than one 
nameOfYourObject[0].nodes[0]['__type'] 
相关问题