如何使用JQuery将大型JSON字符串转换为数组

时间:2014-09-10 14:44:21

标签: javascript jquery arrays json

我有一个如下所示的JSON字符串:

[
    {
        "id": "acbPreviewCell",
        "width": 80
    },
    {
        "id": "advName",
        "width": 170
    },
    {
        "id": "adHeadline",
        "width": 150
    },
    {
        "id": "adSize",
        "width": 150
    },
    {
        "id": "adProduct",
        "width": 150
    },
    {
        "id": "adCategory",
        "width": 150
    },
    {
        "id": "adSection",
        "width": 150
    },
    {
        "id": "adColor",
        "width": 150
    },
    {
        "id": "adTags",
        "width": 150
    },
    {
        "id": "adRegions",
        "width": 150
    },
    {
        "id": "adStatus",
        "width": 150
    },
    {
        "id": "adCreated",
        "width": 150
    },
    {
        "id": "adBookingNb",
        "width": 150
    },
    {
        "id": "adPickup",
        "width": 150
    },
    {
        "id": "folioMeta",
        "width": 150
    }
]

为了进一步说明,这些条目中的每一个都是表头的ID,以及该表头的宽度。我在应用程序中使用它,以便我能记住用户设置的自定义列宽。

我想将这个JSON字符串分解为一个javascript数组,以便我可以轻松访问每个ID及其宽度。

任何帮助都会被理解为将其设置为数组然后将其分解以访问ID和宽度。谢谢!

6 个答案:

答案 0 :(得分:2)

如果您想将其转换为array,可以使用built-in JSON object对其进行解析:JSON.parse(yourString)

但是,如果您想通过ID轻松访问值,则必须将其实际转换为object

var originalData = JSON.parse(yourString);
var parsedData = {};
for (var i = 0, l = originalData.length; i < l; i++) {
    parsedData[originalData[i].id] = originalData[i].width;
}

// now you can easily access the wanted widths
var acbPreviewCellWidth = parsedData['acbPreviewCellWidth'];

答案 1 :(得分:1)

其他人提到了哈希地图,这正是我猜你需要的。也就是说,您希望快速访问id,因为array['advName']会为您提供宽度。

你可以磨练你得到的值:

a = [
    {
        "id": "acbPreviewCell",
        "width": 80
    },
    {
        "id": "advName",
        "width": 170
    },
    {
        "id": "adHeadline",
        "width": 150
    }
];

function rewrite_array(arr){
    new_arr = new Array();
    for( i=0; i<a.length; i++){
        new_arr[arr[i]['id']] = arr[i]['width'];
    }
    return new_arr;
}

n = rewrite_array(a);
console.log(n["advName"]);
console.log(a[1]['width']);

答案 2 :(得分:0)

理论上,它已经存储为数组。但是,如果要解析JSON对象以确保它正确形成,请使用var jsonArray = JSON.parse(jsonString);不需要jQuery。

答案 3 :(得分:0)

答案 4 :(得分:0)

您可能希望使用ajax获取JSON,然后遍历所有值,将它们放到javascript中的数组中,或者只需调用var objArr = $.parseJSON('file');即可获取所有对象的数组。如果你想获取这些值,你只需使用objArr[index].val来获取它们。

使用此功能,您可以调用例如第一个对象值。

var id = objArr[0].id;
var width = objArr[0].width;

答案 5 :(得分:0)

尝试

function filtered(v) {
  return $.map(json, function(value) {
    return value.id === v ? value : null
  })[0];
};

使用

filtered("folioMeta"); // do stuff with "folioMeta" object within array
filtered("folioMeta").id // `"folioMeta"`
filtered("folioMeta").width // `150`