2013-03-05 20 views
9

Mam json tak:Zdobądź indeks klucza w json

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

Teraz chcę wiedzieć indeks klucza, powiedzieć „Klawisz2” w json - czyli 1. Czy istnieje droga?

Odpowiedz

36

będzie za późno, ale to może być proste i użyteczne

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

Co jeśli chcę znaleźć KEY, który zawiera watevr2. ?? –

+0

@TusharShukla Wymaga iteracji, aby znaleźć klucz według jego wartości. Proszę odnieść się do tego [link] (http://stackoverflow.com/questions/9907419/javascript-object-get-key-by-value) – Gowsikan

+0

Czy jest stabilny czy nie? –

4

To, co masz, to ciąg reprezentujący obiekt javascript serializowany przez JSON. Musisz go przekształcić z powrotem w obiekt javascript, zanim będzie można przeglądać jego właściwości. W przeciwnym razie będziesz pętli przez każdy indywidualny znak tego ciągu.

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

lub po prostu:

arr.forEach(function (val, index, theArray) { 
    //do stuff 
}); 
+0

Nigdy nie powiedział, że jego JSON był sznurkiem? Wręcz przeciwnie? – h2ooooooo

7

W zasadzie, to źle szukać indeksu klucza. Klucze mapy hash są nieuporządkowane, nigdy nie powinieneś oczekiwać określonej kolejności.

0

Poszukiwane są indeksy numeryczne w sposobie działania klasycznych tablic, jednak nie ma czegoś takiego w obiektach json/tablicach asocjacyjnych.

"key1", "key2" same są indeksami i nie ma z nimi powiązanego indeksu numerycznego. Jeśli chcesz mieć taką funkcjonalność, musisz je sam przyporządkować.

0

Spróbuj

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

To będzie wymagało biblioteki jQuery. –

11

Nie trzeba indeks liczbowy dla klucza obiektu, ale wiele inni ci to powiedział.

Oto rzeczywista odpowiedź:

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

Choć prawdopodobnie jesteś po prostu szukają tej samej pętli, który używałem w tej funkcji, więc można przejść przez obiekt:

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

które wyjście będzie

key1 is watevr1 
key2 is watevr2 
key3 is watevr3 
+1

Cóż, nie szukałem pętli do iterowania nad jsonem. Właściwie w części mojego kodu tworzę tablicę przez iterowanie nad jsonem. W innym fragmencie kodu mam klucz z json i mam tablicę i potrzebuję znaleźć element tablicy, który odnosi się do tego klucza. Wiem, że jestem w dziwnej sytuacji i możesz być zdezorientowany, ale dostałem to, czego szukałem. Więc dziękuję! – shreyj

Powiązane problemy