Как посчитать элемент объекта json? - PullRequest
0 голосов
/ 21 октября 2019

Я анализирую строку JSON в Android, которая выглядит следующим образом:

 [
   {
     "id":70,
     "selection":"25"
    },
    {
      "id":71,
      "selection":"50"
    },
    {
      "id":72,
      "selection":"50"
    }
 ]

Теперь я хочу получить общее количество всех selection и отобразить его в текстовом представлении. Может ли кто-нибудь дать мне пример, как это сделать, или любой учебник по этому поводу?

Например:

selection 25 = 1
selection 50 = 2

Спасибо за любую помощь!

Ответы [ 4 ]

1 голос
/ 21 октября 2019

Я думаю, что вы ищете что-то вроде этого:

        JsonArray selections = new JsonArray(); // This is your parsed json object
        HashMap<Integer, Integer> count = new HashMap<>();
        for (JsonElement element : selections) {
            JsonObject jsonObject = element.getAsJsonObject();
            if(jsonObject.has("selection")) {
                int selValue = jsonObject.get("selection").getAsInt();
                if(count.containsKey(selValue)) {
                    count.put(selValue, count.get(selValue) + 1);
                } else {
                    count.put(selValue, 1);
                }
            }
        }

Что это будет делать, это циклически обрабатывать массив json и получать значение каждого элемента выбора. Для отслеживания счетчика он увеличивает счетчик внутри хэш-карты count.

Затем можно получить счет для определенного значения из хеш-карты:

count.get(25); // returns 1
count.get(50); // returns 2
// etc...
0 голосов
/ 22 октября 2019
    ArrayList<String> data = new ArrayList<>();
    ArrayList<String> datacount = new ArrayList<>();


            jsonStr = "Your JSON"

            JSONArray jsonArr= null;
            try {
                jsonArr = new JSONArray(jsonStr);
                for (int i = 0; i < jsonArr.length(); i++) {
                    JSONObject jsonObj = jsonArr.getJSONObject(i);
                    //here you can set to TextView
                    String selection = jsonObj.getString("selection");
                    //System.out.println("adcac"+selection);

                    if (data.contains(selection)) {

                        int index = data.indexOf(selection);

                        int count = Integer.parseInt(datacount.get(index))+1;

    //                    System.out.println("Index==="+index+"---count---"+count);
                        datacount.set(index,String.valueOf(count));
                    } else {
                        datacount.add(String.valueOf(1));
                        data.add(selection);
                    }
     // Here you can get data and data count...  
    //                System.out.println("data---"+datacount.toString());
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
0 голосов
/ 21 октября 2019

Если вы используете Jackson в Java 8, вы можете сначала преобразовать данную строку JSON в List<Map<String, Object>>, а затем преобразовать ее в List<Integer> для выбора . Наконец, вы можете посчитать вхождения в этом списке следующим образом:

ObjectMapper mapper = new ObjectMapper();
List<Map<String, Object>> jsonObj = mapper.readValue(jsonStr, new TypeReference<List<Map<String, Object>>>(){});
Map<Integer, Long> counted = jsonObj.stream()
        .map(x -> Integer.valueOf(x.get("selection").toString()))
        .collect(Collectors.toList())
        .stream()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

System.out.println(counted.toString());

Вывод на консоль:

{50 = 2, 25 = 1}

0 голосов
/ 21 октября 2019

вы можете получить массив json и итерировать и вычислить сумму выделения

JSONArray selections = jsonObj.getJSONArray("selections");

// looping through All Selections
int totalCount = selections.length();

...