30

我有一个像这样的json:

json = { "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" }

现在,我想知道一个键的索引,比如 json 中的“key2”——即 1。有没有办法?

4

6 回答 6

110

为时已晚,但它可能简单而有用

var json = { "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" };
var keytoFind = "key2";
var index = Object.keys(json).indexOf(keytoFind);
alert(index);
于 2013-10-16T05:59:49.243 回答
13

您不需要对象键的数字索引,但许多其他人已经告诉过您。

以下是实际答案:

var json = { "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" };

console.log( getObjectKeyIndex(json, 'key2') ); 
// Returns int(1) (or null if the key doesn't exist)

function getObjectKeyIndex(obj, keyToFind) {
    var i = 0, key;

    for (key in obj) {
        if (key == keyToFind) {
            return i;
        }

        i++;
    }

    return null;
}

尽管您可能只是在搜索我在此函数中使用的相同循环,但您可以遍历该对象:

for (var key in json) {
    console.log(key + ' is ' + json[key]);
}

哪个会输出

key1 is watevr1
key2 is watevr2
key3 is watevr3
于 2013-03-05T08:11:35.833 回答
10

原则上,寻找键的索引是错误的。哈希映射的键是无序的,你永远不应该期望特定的顺序。

于 2013-03-05T07:59:02.347 回答
5

你所拥有的是一个字符串,它代表一个 JSON 序列化的 javascript 对象。您需要将其反序列化回一个 javascript 对象,然后才能遍历其属性。否则,您将遍历该字符串的每个单独字符。

var resultJSON = '{ "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" }';
    var result = $.parseJSON(resultJSON);
    $.each(result, function(k, v) {
        //display the key and value pair
        alert(k + ' is ' + v);
    });

或者简单地说:

arr.forEach(function (val, index, theArray) {
    //do stuff
});
于 2013-03-05T07:56:23.457 回答
0

您所追求的是经典数组工作方式中的数字索引,但是 json 对象/关联数组没有这样的东西。

“key1”、“key2”本身就是索引,没有与之关联的数字索引。如果你想拥有这样的功能,你必须自己关联它们。

于 2013-03-05T07:59:21.240 回答
-1

试试这个

var json = '{ "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" }';
json = $.parseJSON(json);

var i = 0, req_index = "";
$.each(json, function(index, value){
    if(index == 'key2'){
        req_index = i;
    }
    i++;
});
alert(req_index);
于 2013-03-05T08:07:52.627 回答