2017-02-22 5 views
0

У меня есть данные с json-форматом, и я попытался показать ее с помощью ajax и успешно. но как найти один id в json с помощью ajax? и правильно ли это сценарий? Например, я хочу найти id 2.Получите значение данных на основе `id` с ajax json

Мой JSON

{ "device": [ 
    { 
     "id": 1, 
     "name": "Android" 
    }, 
    { 
     "id": 2, 
     "name": "Apel" 
    }, 
    { 
     "id": 3, 
     "name": "Windows" 
    } 
] } 

Мой Аякса

$(document).ready(function() { 
    var id_pm = 2 ; 
    var dataString = "id="+id_pm; 
    $.ajax({ 
     type: "GET", 
     url: "data.json", 
     data: dataString, 
     cache: false, 
     timeout: 3000, 
     error: function(){ 
      alert('Error'); 
     },    
     success: function(result){ 
      var result=$.parseJSON(result); 
      $.each(result, function(i, element){   
       var id=element.id; 
       var name=element.name; 
      }); 
     } 
    }); 
}); 
+1

* «И правильно ли это сценарий?» * - Что случилось, когда вы его запустили? – nnnnnn

+0

yes Я ожидал, как искать 'id' = 2 данных.json без использования запроса url –

+1

Возможный дубликат [Получить объект JavaScript из массива объектов по значению или свойству] (http://stackoverflow.com/questions/ 13964155/get-javascript-object-from-array-of-objects-by-value-or-property) – Rajesh

ответ

1

идентификаторам предназначены для unique.If вашего JSON не содержит последовательных идентификаторов, тогда вам придется последовательно сканировать все объекты, подобные этому:

//put this inside your success callback. 
var mysearchId = 2; 
//res is now array of all your devices. 
var res = (JSON.parse(result)).device; 
for(var i = 0;i < res.length;i ++) { 
    if(res[i].id == mysearchId) { 
     console.log(res[i]); 
     return; 
    } 
} 
console.log('not found!'); 

Это находит нужный элемент в O (N) раз.

В случае, если ваши идентификаторы являются последовательными, вы можете найти определенный элемент в O (1) time.To достичь этого, массив устройств должен быть отсортирован. Например, если вы хотите найти элемент с id 10, вы можете получить к нему доступ res[(10-1)]; //==>res[9]; при условии, что первый элемент имеет id = 1.

0

Вы можете использовать функцию фильтра для фильтрации данных на основе идентификатора

var data = { 
      "device": [ 
     { 
      "id": 1, 
      "name": "Android" 
     }, 
     { 
      "id": 2, 
      "name": "Apel" 
     }, 
     { 
      "id": 3, 
      "name": "Windows" 
     } 
      ] 
     }; 

     var res = data.device.filter(function (obj) { 
      return obj.id == 2; 
     }); 

if(res.length){ 
    console.log(res[0].id); 
    console.log(res[0].name); 
} 
+1

'Array.find' подойдет больше – Rajesh

+0

Также не следует закрывать вопрос как дубликат, так как есть много сообщений на * получение объекта на основе ключа *? – Rajesh

+0

@Mairaj, спасибо за ответ, но мои данные в файле на url ex.'http: // project/data.json' –

Смежные вопросы