使用键0/1而不是键名访问JSON

时间:2014-05-23 13:33:43

标签: javascript jquery json

我的json看起来或多或少是这样的:

{
    "TaskCategoryType": [
        {
            "PK_Column_Value": "C",
            "Column_Description": "Consumables"
        },
        //...
    }

我需要检索" PK_Column_Value"的值。不知道密钥的名称。

循环并获得记录很好,但我不想要:

row.PK_Column_Value

在我的Javascript中,因为在运行时,我不知道名称" PK_Column_Value",只是它是2列中的第一个"对"每个json行。

我试过:row [0]但是它返回undefined。

我想加载一个选择下拉框,其值为" PK_Column_Value" "描述"的文本,但我想通过其他json数据发送,这些数据在JSON中具有不同的列名。

3 个答案:

答案 0 :(得分:2)

你能做的最好的就是循环和检查,不同的浏览器可以产生不同的对象顺序:

for (var i = 0; i < data.TaskCategoryType.length; i++) {
    for (var key in data.TaskCategoryType[i]) {
        console.log(data.TaskCategoryType[i][key]) //Your keys
    }
}

答案 1 :(得分:1)

唯一“干净”的方法是重构JSON以包含数组而不是对象。

{
"TaskCategoryType": [
    [
        "C",
        "Consumables"
    ],
    //...
}

但我个人认为,这样可以使代码更容易阅读和维护。

答案 2 :(得分:0)

假设您的对象有两个键,并且您知道其他键;

var o = {
    "PK_Column_Value": "C",
    "Column_Description": "Consumables"
};
  1. 获取密钥

    var keys = [], k;
    for (k in o) keys.push(k);
    
  2. 找到 Column_Description

    i = keys.indexOf('Column_Description');
    
  3. 获取其他密钥

    k = keys[1 - i];
    
  4. 现在

    k === 'PK_Column_Value';
    

    这解决了您无法保证关键顺序的事实