具有奇怪前缀的Javascript数组项

时间:2016-04-18 12:35:11

标签: javascript json

我从API调用中获取此数组:

[   
    Node { id: 123, properties: {color : 'red', shape : 'round'} },
    Node { id: 121, properties: {color : 'blue', shape : 'square'} },
    Node { id: 119, properties: {color : 'yellow', shape : 'rectangular'} }
]

这是什么老实说?它不是一个对象数组吗?如果是:

[   
    { id: 123, properties: {color : 'red', shape : 'round'} },
    { id: 121, properties: {color : 'blue', shape : 'square'} },
    { id: 119, properties: {color : 'yellow', shape : 'rectangular'} }
]

我想要访问"颜色" - 数组中第一项的属性我会去:

myArray[0].properties.color

但我不能在这里做这件事,因为奇怪的" Node" - 数组中每个项目的前缀。

这是什么东西,我如何访问它上面的任何属性?

1 个答案:

答案 0 :(得分:1)

我不确定,但是如果这个数据就像你提出的那样简单,我建议你是懒惰并从字符串中替换Node

var str = `[   
    Node { id: 123, properties: {color : 'red', shape : 'round'} },
    Node { id: 121, properties: {color : 'blue', shape : 'square'} },
    Node { id: 119, properties: {color : 'yellow', shape : 'rectangular'} }
]`;
var withoutCrap = str.replace(/Node\s*\{/g, "{");

输出:

[   
    { id: 123, properties: {color : 'red', shape : 'round'} },
    { id: 121, properties: {color : 'blue', shape : 'square'} },
    { id: 119, properties: {color : 'yellow', shape : 'rectangular'} }
]

请注意,这仍然是无效的JSON 。 JSON规范要求引用密钥{"like": "this"}。但是,您可以使用good'ol dirty eval

将其转换为JS对象
var myObject = eval("("+withoutCrap+")");

这些额外的括号可以防止我过去遇到的一些问题。

解决此问题的正确方法是获取与此协议关联的 API框架(显然不是JSON)。它将包含将正确解释数据的解析器。您应该在您要连接的站点上查找文档。