Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取json中键的索引_Javascript_Json - Fatal编程技术网

Javascript 获取json中键的索引

Javascript 获取json中键的索引,javascript,json,Javascript,Json,我有这样一个json: json = { "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" } 现在,我想知道一个键的索引,比如json中的“key2”——也就是1。有办法吗 您拥有的是一个表示JSON序列化javascript对象的字符串。在能够循环遍历其属性之前,需要将其反序列化回javascript对象。否则,您将遍历该字符串的每个单独字符 var resultJSON = '{ "key1" : "watevr1",

我有这样一个json:

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

现在,我想知道一个键的索引,比如json中的“key2”——也就是1。有办法吗

您拥有的是一个表示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
});

原则上,查找键的索引是错误的。散列映射的键是无序的,您永远不应该期望特定的顺序。

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

“键1”、“键2”本身是索引,没有与之相关的数字索引。如果你想拥有这样的功能,你必须自己帮助他们。

试试这个

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

对象键不需要数字索引,但许多其他人都告诉过您这一点

以下是实际答案:

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

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

var json = { "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" };
var keytoFind = "key2";
var index = Object.keys(json).indexOf(keytoFind);
alert(index);

这需要jQuery库。他从来没有说过他的JSON是字符串?事实恰恰相反?我不是在寻找循环来迭代json。实际上,在我的一段代码中,我通过迭代json创建了一个数组。在另一段代码中,我有一个来自json的键,我有一个数组,我需要找到与这个键相关的数组元素。我知道我的处境很奇怪,你可能会感到困惑,但我得到了我想要的。谢谢!如果我想找到包含watevr2的键,该怎么办?@TusharShukla需要迭代才能通过其值找到键。请参考这是稳定还是不稳定?我在小提琴上尝试了这个解决方案,但似乎我总是得到-1作为结果。这是小提琴。我是不是遗漏了什么?请help@shifu因为json不是对象。它被认为是字符串,因为它带有单引号。我刚刚删除了单引号。请现在检查。根据
RFC
json中的
key:value
对顺序,已为初学者更新fiddle链接