2013-08-21 2 views
1

Как еще один пользователь в моем другом thread предложил отправить еще один вопрос здесь, чтобы объяснить, как получить доступ к объектам JSON. Код я использую:Доступ к строковым объектам JSON

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
<script> 
$(function() { 
    $.getJSON(
     "https://api.guildwars2.com/v1/wvw/matches.json", 
     function (data) { 
      $("#reply").html(JSON.stringify(data)); 
      // or work with the data here, already in object format 
     }); 
}); 
</script> 

То, что я пытаюсь сделать с the JSON code, чтобы искать в течение определенного world_id и вернуть match_id. Я очень новичок в JavaScript, поэтому я не слишком уверен, как это сделать, и как получить доступ к строковым данным, которые мне дает код.

Как я понял, как это сделать, чтобы создать массив и хранить каждый объект в нем, то проходное и проверьте совпадающего идентификатора, как,

if(obj[i].red_world_id == 'xxxx' || obj[i].blue_world_id == 'xxxx' || obj[i].green_world_id == 'xxxx') { 
    return obj[i].wvw_match_id; 
} 

Моя единственная проблема в том, что я не знаете, как установить массив как данные JSON.

+0

Вы должны добавить JSON. – crush

+0

Этот json уже является массивом –

+5

У вас уже был объект, прежде чем вы превратили его в строку, и вы могли бы просто перебирать и искать ключи и значения в нем напрямую, поэтому зачем превращать его в строку? – adeneo

ответ

2

.use этот код -

$(function() { 
    $.getJSON("https://api.guildwars2.com/v1/wvw/matches.json", function(
      data) { 
     $("#reply").html(JSON.stringify(data)); 
     // or work with the data here, already in object format 
     var result = [];//for if it has many matches 
     for (var i=0;i<data.wvw_matches.length;i++) { 
      var obj = data.wvw_matches[i]; 
      if (obj.red_world_id == 'xxxx' || obj.blue_world_id == 'xxxx' 
        || obj.green_world_id == 'xxxx') { 
       result.push(obj.wvw_match_id); 
      } 
     } 
    }); 
}); 
+3

Вы не должны использовать 'for ... in' для перебора массива. Кроме того, это должно быть 'data.wvw_matches', а не просто' data'. Вы должны использовать 'for (var i = 0; i crush

+3

, возвращающий значение из асинхронного запроса ничего не сделают. – dc5

+1

извините, просто была ошибка копирования-вставки –

1

Там нет необходимости stringify, вы могли бы работать с объектом JSON непосредственно:

function(data) { 
    var filteredArray=$.grep(data.wvw_matches, function (item) { 
     return (item.red_world_id == 'xxxx' || item.blue_world_id == 'xxxx' || item.green_world_id == 'xxxx'); 
    }); 
} 

See this page для получения информации о jQuery.grep.