JSON 数组转JS对象数组

JSON Array into JS Object Array

我真的很讨厌 'do this for me' 问题,但我完全不知所措。我想我就是不明白 JSON。所以这是我的 JSON:

的例子
"max":"10",
"min":"0",
"attributes":[
    {
        "attributeName":"Fortitude",
        "attributeColor":"#B7B7B7"
    },
    {
        "attributeName":"Vigor",
        "attributeColor":"#D5A6BD"
    },
    {
        "attributeName":"Celerity",
        "attributeColor":"#B4A7D6"
    }
]

它是外部的,我想抓取它,然后设置一个js变量作为属性对象数组。所以如果在 JS 中我设置:

 var attributes = [];
 attributes = whatEverNeedsToGoHere;

然后我遍历该变量我可以做类似的事情:

console.log(attributes[0].attributeName);

并获得"Fortitude"。我了解如何使用 $.getJSON(); 获得 JSON 和 jQuery;但我不知道将属性数组转换为对象数组需要发生什么。

更新:我现在如何调用 JSON。

var attributesData = $.getJSON("jsonDB/attributes.js", function(data){

        var thisAttribute = {"attributeName":String(data[i].attributeName),"attributeColor":String(data[i].attributeColor)};
        attributes.push(thisAttribute);
        console.log(attributes.attributeName);

});

首先,您的JSon数据无效。

此数据设置为 Json 的正确格式如下:

{
    "max": "10",
    "min": "0",
    "attributes": [
        {
            "attributeName": "Fortitude",
            "attributeColor": "#B7B7B7"
        },
        {
            "attributeName": "Vigor",
            "attributeColor": "#D5A6BD"
        },
        {
            "attributeName": "Celerity",
            "attributeColor": "#B4A7D6"
        }
    ]
}

而且,在这种情况下,我强烈建议使用 Jspath。 Jspath 允许您对 JSon 数据执行 XPath 表达式。

这可能是您想要的:

var attributes;

$.getJSON("jsonDB/attributes.js", function(data){
  attributes = data.attributes;
  console.log(attributes);
});

你可以测试一下here。为此,我存根了 getJSON

function getJSON(url, callbackfn){
  var data = {
    "max":"10",
    "min":"0",
    "attributes":[
      {
        "attributeName":"Fortitude",
        "attributeColor":"#B7B7B7"
      },
      {
        "attributeName":"Vigor",
        "attributeColor":"#D5A6BD"
      },
      {
        "attributeName":"Celerity",
        "attributeColor":"#B4A7D6"
      }
    ]
  }

  callbackfn(data);
}

var attributes;

getJSON("jsonDB/attributes.js", function(data){
  attributes = data.attributes;
  console.log(attributes);
});

使用开源项目jinqJs你可以在一行中做到这一点

var data = {"max":"10",
"min":"0",
"attributes":[
    {
        "attributeName":"Fortitude",
        "attributeColor":"#B7B7B7"
    },
    {
        "attributeName":"Vigor",
        "attributeColor":"#D5A6BD"
    },
    {
        "attributeName":"Celerity",
        "attributeColor":"#B4A7D6"
    }
]
}

var result = jinqJs().from(data).select('attributes');

document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 4) + '</pre>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>

.

var attributes = jinqJs().from('http://..some json url').select('attributes');

这将 return 收集以下内容:

[
        {
            "attributeName":"Fortitude",
            "attributeColor":"#B7B7B7"
        },
        {
            "attributeName":"Vigor",
            "attributeColor":"#D5A6BD"
        },
        {
            "attributeName":"Celerity",
            "attributeColor":"#B4A7D6"
        }
    ]