【问题标题】:JSON Array into JS Object ArrayJSON 数组转换成 JS 对象数组
【发布时间】:2015-04-02 14:42:08
【问题描述】:

我真的很讨厌“为我做这个”的问题,但我完全不知所措。我想我只是没有得到 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);

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

更新:我现在如何调用 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);

});

【问题讨论】:

  • “它是外部的,我想抓住它” - 你的 ajax 调用在哪里?

标签: javascript jquery arrays json javascript-objects


【解决方案1】:

这可能就是你所追求的:

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);
});

【讨论】:

  • 我知道必须如此简单。西莫……我……我爱你。
【解决方案2】:

使用开源项目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>';
&lt;script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"&gt;&lt;/script&gt;

.

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

这将返回以下内容的集合:

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

【讨论】:

    【解决方案3】:

    首先,你的JSON数据是无效的。

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

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

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

    【讨论】:

    • 我会研究一下,它让我想起了 JSON 的查询引擎。但是在 JS 或 jQuery 中没有本地方法可以做到这一点吗?
    • 真的要为这么小的 JSON 数据包提供整个库吗?
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多