2013-06-21 4 views
0

Я хочу имена, как Салем, Мадурая из этого JSONПолучить имя массива объекта в формате JSON

{ 
    "status": "success", 
    "DisplayList": [ 
     { 
      "AVINASHI": [ 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "AVINASHI": [ 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "ERNAVOOR": [ 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "ERNAVOOR": [ 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "HYDCURD": [ 
       "[email protected]" 
      ] 
     }, 
     { 
      "KANCHIPURAM": [ 
       "[email protected]" 
      ] 
     }, 
     { 
      "KEELKATTLAI": [ 
       "[email protected]" 
      ] 
     }, 
     { 
      "MADURAI": [ 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "MADURAI": [ 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "SALEM": [ 
       "[email protected]", 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "SALEM": [ 
       "[email protected]", 
       "[email protected]", 
       "[email protected]" 
      ] 
     }, 
     { 
      "SALEM": [ 
       "[email protected]", 
       "[email protected]", 
       "[email protected]" 
      ] 
     } 
    ] 
} 
+3

Geeze, что на самом деле плохо использование JSON. У вас есть контроль над выходом вообще? – Marty

+1

Если да, у вас должно быть что-то вроде этого: http://pastebin.com/bbWv1n8n – Marty

+0

@Marty: Почему не просто http://pastebin.com/jxLpP4eT? – Bergi

ответ

3
var List = JSONObject['DisplayList']; 
for(var i=0;i<List.length;i++) 
{ 
    for(var key in List[i]) 
    { 
     console.log(key); //will print names 
     console.log(List[i][key]);//will print array of email 
    } 
} 

Принято считать, у вас есть данные в формате JSON в переменной JSONObject

+0

Спасибо Nish It Helps :) – user2507717

0

Попробуйте

for(var i in json.DisplayList) //Gets Array 
    for(var k in json.DisplayList[i]) // Get object on 'i'th index of the DisplayList Array 
     console.log(k); //Get the key of that object. 
+2

Пожалуйста, не используйте 'for..in' для перебора массивов. Он также выбирает нечисловые свойства (такие как функции, которые вы добавляете к прототипу), и порядок итераций не гарантируется. –

+0

Спасибо, но как насчет того, проверяется ли тип во внутреннем цикле? например typeof json.DisplayList [i] == "объект"; –

+1

Хотя это будет ловить функции, добавленные к прототипу, если кто-то добавит объект к прототипу, он все равно будет подхвачен итерацией. 'hasOwnProperty' намного лучше, но у вас все еще нет гарантированного порядка итераций, он по-прежнему захватывает нечисловые свойства, добавленные в массив (не беспокойтесь, если это только что разобранный JSON), и он не слишком длинный. –

2
var obj = { status:'success', DisplayList: [{...}, {...}]} // your object 

var l = obj.DisplayList.length, 
    result = []; 

while (l--){ 
    result = result.concat(Object.keys(obj.DisplayList[l])); 
} 

console.log(result.join(", ")); 

В этом подходе используется Object.keys, который предназначен для перечисления свойств объекта без включения свойств прототипа. Это только IE9 +, хотя так мы по-прежнему нужен плагин: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Compatibility

+3

'concat' не мутирует массив. – Bergi

+0

+ Хороший улов. Обновлено. – Malk

0

Вот код:

var DisplayList = JSONObject['DisplayList']; 
var NamesList = []; 
for(var i=0; i<DisplayList.length; i++) 
{ 
    for(var keyName in List[i]) 
    { 
     if(NamesList.indexOf(keyName) >= 0) 
     { 
      NamesList.push(keyName); 
     } 
    } 
} 
console.log(NamesList); //Output: ['AVINASHI','ERNAVOOR','HYDCURD',...] 
//Not the names will not repeat.. the array will have unique values