无法将JSON重新格式化为数组以在AngularJs中使用

时间:2015-06-10 15:27:58

标签: javascript json angularjs

Js有一个我正在使用的内置解析函数:JSON.parse。重新格式化我无法绕过头脑。例如,如果我想从NASA API获取所有星星作为JSON。这给了我一个包含所有星星的大量列表,其中一个条目如下:

{
    "absmag": 4.85, 
    "appmag": -26.72, 
    "colorb_v": 0.65, 
    "created_at": "2014-11-08T07:30:49.614Z", 
    "dcalc": 0.0, 
    "distly": 0.0, 
    "hipnum": 0.0, 
    "id": 1, 
    "label": "Sun", 
    "lum": 0.8913, 
    "plx": 0.0, 
    "plxerr": 0.0, 
    "speed": 0.0, 
    "texnum": 1.0, 
    "updated_at": "2014-11-08T07:30:49.614Z", 
    "vx": 0.0, 
    "vy": 0.0, 
    "vz": 0.0, 
    "x": 0.0, 
    "y": 0.0, 
    "z": 0.0
}

然后我删除了"标签"搜索价值:

window.database.forEach(function(el) {
            var starNameArray = el.label;
        })

这给了我一个明星标签的清单。我需要将此列表转换为此表单:

[ 'thing1', 'thing2', 'thing3' ]

我尝试使用这样的东西:

console.log("'" + starNameArray.join("','") + "'");

但我收到错误:"未捕获TypeError:starNameArray.join不是函数"

知道为什么吗?我在这边的某个地方犯了一个愚蠢的错误吗?

3 个答案:

答案 0 :(得分:1)

var starNameArray = [];
window.database.forEach(function(el) {
   starNameArray.push(el.label);
});
console.log(starNameArray.join(","));

答案 1 :(得分:0)

根据您提供的代码starNameArray只是存储一个字符串值,您尝试创建一个数组,然后将每个标签推送到数组中,如

var starNameArray = [];
window.database.forEach(function(el){
     starNameArray.push(el.label);
})

执行此操作后,您将拥有一系列元素。

join方法将创建一个元素字符串而不是实际数组。

答案 2 :(得分:0)

看起来你在foreach中声明starNameArray并将starNameArray设置为el.label,所以它是一个基于你JSON示例的字符串。此外,它的范围仅在foreach中,因此假设您的console.log在该函数之外,并且未在其他地方声明,则starNameArray将是未定义的。 @edrain刚刚发布了修复这些问题的代码。