2015-06-22 4 views
-1

У меня есть простая проблема, но я не могу ее решить, так как я не очень хорошо разбираюсь в алгоритме! У меня есть JSONArray в таком виде:делать вычисления внутри JSONArray в Java

[{"values":[{"time":1434976493,"value":"50"}, 
{"time":1434976494,"value":"100"}],"counter":"counter1"}, 

{"values":[{"time":1434976493,"value":"200"}, 
{"time":1434976494,"value":"300"}],"counter":"counter2"}, 

{"values":[{"time":1434976493,"value":"400"}, 
{"time":1434976494,"value":"600"}],"counter":"total"}] 

То, что я хочу сделать, это получить целое значение для счетчика 1 и счетчик 2, а затем разделить их на общий счетчик и поместить их в список или массив. и, конечно, я хочу, чтобы общий счетчик был нетронутым! Таким образом, расчет будет Counter1.value/total.value, Counter2.value/total.value Так, например, счетчик 1 будет выглядеть так:

{"values":[{"time":1434976493,"value":"50/400"},{"time":1434976494,"value":"100/600"}],"counter":"counter1"} 

То незавершенную попытку:

(учитывая, что у меня есть список счетчиков, которые я могу перебирать :)

int index= counters.indexOf("total"); 
JSONObject rec = array.getJSONObject(index); 

, а затем я получил это для общего счетчика:

{"values":[{"time":1434976493,"value":"400"}, 
    {"time":1434976494,"value":"600"}] 

не уверен, что следующий шаг ?!

+2

Я не уверен, что это так написано или как данные переданы, но я не могу понять вопрос. – d0nut

+0

позволяет предположить, что я просто хочу получить целочисленное значение! не время! и поместите их в список. Это то, что я хочу сделать с первой попытки – shirin

+0

Итак, вы просто хотите получить список всех «значений»? [50,100] (как в первом примере JSON)? – d0nut

ответ

0

Вот что я хотел бы сделать. Заменить <JSON STRING HERE> с JSON строку, которую вы собираетесь разобрать:

ArrayList<ArrayList<Integer>> resultList = new ArrayList<ArrayList<Integer>>(); 

JSONArray arr = new JSONArray(<JSON STRING HERE>); 

for(int i = 0; i < arr.length(); i ++) 
{ 
    JSONObject obj = arr.getJSONObject(i); 
    JSONArray valueArray = obj.getJSONArray("values"); 

    ArrayList<Integer> dataList = new ArrayList<Integer>(); 
    resultList.add(dataList); 

    for(int j = 0; j < valueArray.length(); j ++) 
    { 
     JSONObject valueObject = valueArray.getJSONObject(j); 
     Integer value = valueObject.getInt("value"); 
     dataList.add(value); 
    } 
} 

В результате список списков Целые называется resultList. Удачи!

Помните, что вы должны обернуть все это в попытке, поймать.

+0

Спасибо за ваш ответ, я получаю эту ошибку «Сервер не смог разобрать JSON», поэтому давайте вернемся несколько шагов к тому, что вы сделали. пока здесь: JSONArray valueArray = obj.getJSONArray ("values"); все хорошо, и я получаю три отдельных массива со значением и временем, но когда я добавляю второй цикл, он становится сумасшедшим – shirin

+0

Если вы получаете «сервер не смог разобрать JSON», тогда ваш JSON будет искажен. Я уже проверил код в своем эмуляторе Android с первой строкой, которую вы мне дали (той, что была в верхней части вашего вопроса), и она отлично работала. – d0nut

+0

Возможно, отредактируйте свой вопрос с точной строкой, которую вы передаете в JSONArray arr – d0nut