2016-02-08 1 views
2

У меня есть ответ json от php до ajax. Вещь зависит от значения, введенного в текстовое поле, количество массивов json варьируется. Пример: иногда он может возвращаться {"count1":10, "ccc1":30}, а иногда так {"count1":10, "ccc1":32, "count2":40, "ccc2":123,"count3":32,"ccc3":21}. Извлечь значение в JQuery таким образом:Обработка json, где число динамических массивов json является динамическим

success: function(response){ 
    var count = response.count1; 
    //do something 
} 

Но теперь, так как число отсчетов различны, я использовал цикл. Вопрос: я могу выяснить, сколько из них я получаю, но как я могу их обработать? Значение var count = response.count должно быть конкретным? Я не могу просто конкретизировать такие строки:

var count = 0;  
while(something){ 
    count = count + 1; 
    var str = "count"+count; 
    var whatever = response.str; 
} 

Итак, может кто-нибудь помочь мне с подходящим решением в этом случае?

ответ

1

Вы на правильном пути. Что-то вроде этого должно работать на вас.

var i = 1; 
while(response['count' + i]) { 
    var count = response['count' + i++]; 
} 

Доступ к свойствам можно получить, как если бы они были индексами массива. поэтому работает response['count'+i].

+0

К сожалению, это не работает. Он показывает неопознанные. – Adib

+0

Это работает для меня. Вставьте это в консоль браузера. http://pastebin.com/tGXs6rbs – Achshar

+0

Я думаю, что в моем случае ответ является объектом, поэтому его, вероятно, не работает. Не могли бы вы еще раз взглянуть на мой код. – Adib

1

Прокрутите все свойства и добавьте их в переменную, как показано ниже.

var response = { "count1": 10, "ccc1": 32, "count2": 40, "ccc2": 123, "count3": 32, "ccc3": 21 }; 
var count = 0; 
for (var prop in response) { 
    if (prop.startsWith('count')) 
     count += response[prop]; 
} 
console.log(count); 
+0

пожалуйста, проверьте отредактированный массив JSON в этом вопросе. – Adib

+0

См. Мой обновленный ответ. @KimJongUn – Azim

0
success: function(response){ 
var count = response.count1; 
    var object = JSON.parse(response); 
    alert(object.length); 
    for (i = 0; i < object.length; i++) { 
     console.log(object[i]); 
    } 
} 
+0

Как это решить любую из проблем OP. Он просто перебирает объект json. – Achshar

+0

ist преобразует json-данные в массив javascript перед циклом –

1

Чтобы получить все значения используют jQuery$.each функцию.

var data_tmp = '{"count1":10, "ccc1":32, "count2":40, "ccc2":123,"count3":32,"ccc3":21}'; 
 
var data = $.parseJSON(data_tmp); 
 
    
 

 
    
 

 
$.each(data, function(k,val){ 
 
    if(k.toLowerCase().indexOf("count") >= 0){ 
 
     $('.wr').append('<div>' + val + '</div>') 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<div class="wr"></div>

+0

, но мне нужно только извлечь подсчеты, вы также включите ccc с подсчетами – Adib

+0

@KimJongUn, обновив мой пример. Теперь он будет содержать только значения ключей, содержащих 'count' – ZeJur

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