Получить конкретный индекс вложенных объектов JSON в java Android

#java #android #arrays #json #nested

Вопрос:

Как я могу получить только строку «имя» каждого объекта в массиве «поля», индекс основного массива в 0, а затем следующий индекс с помощью цикла или с какой-то супер идеей

 [
    {
        "name": "Bank1",
        "fields": [
            {
                "name": "Email",
                "slug": "email",
                "type": "input"
            },
            {
                "name": "City",
                "slug": "city",
                "type": "input"
            },
            {
                "name": "Screenshot",
                "slug": "screenshot",
                "type": "file"
            },
            {
                "name": "Full Name",
                "slug": "full-name",
                "type": "input"
            }
        ],
        "status": "Active"
    },
    {
        "name": "Bank2",
        "fields": [
            {
                "name": "Email",
                "slug": "email",
                "type": "input"
            },
            {
                "name": "City",
                "slug": "city",
                "type": "input"
            },
            {
                "name": "Screenshot",
                "slug": "screenshot",
                "type": "file"
            },
            {
                "name": "Submitted Date",
                "slug": "submitted-date",
                "type": "calendar"
            }
        ],
        "status": "Active"
    }
]
 

Вывод, который я хочу:
Email

Скриншот города
Полное Имя

Означает, что на выходе я получил индекс 0, данные первого массива объектов…

Что я еще не сделал

 public void onResponse(String response) {
                        try {
                            JSONArray jsonArray = new JSONArray(response);


                            for (int i = 0; i < jsonArray.length(); i  ) {
                                JSONObject jsonObject = jsonArray.getJSONObject(i);

                               
                                String p_name = jsonObject.getString("name");

                                 ArrayList<String> arr = new ArrayList<>();

                                JSONArray ja = jsonObject.getJSONArray("fields");
                                int len = ja.length();

                                for (int j = 0; j < len; j  ) {
                                    JSONObject json = ja.getJSONObject(j);
                                    arr.add(json.getString("name"));
                                }


}}catch block...
 

это дает мне все данные об именах индексов, которые мне нужны только для конкретных данных индекса
Мой Текущий Выход:

Скриншот города электронной почты
Полное Имя

Скриншот Города Электронной Почты
Дата отправки

Комментарии:

1. Используйте хэш-карту для хранения как индекса, так и его имени значения

2. как вы можете привести мне пример? @Пиюш

Ответ №1:

Если вы хотите получить конкретные данные индекса, вам следует передать условие if в цикл for.

ПРИМЕР: чтобы получить вывод индекса 0, например,

Электронная почта

Город

Скриншот

полное имя

Ваш код будет выглядеть так, как показано ниже.

 public void onResponse(String response) {
                    try {
                        JSONArray jsonArray = new JSONArray(response);


                        for (int i = 0; i < jsonArray.length(); i  ) {
                          if(i==0){

                            JSONObject jsonObject = jsonArray.getJSONObject(i);

                           
                            String p_name = jsonObject.getString("name");

                             ArrayList<String> arr = new ArrayList<>();

                            JSONArray ja = jsonObject.getJSONArray("fields");
                            int len = ja.length();

                            for (int j = 0; j < len; j  ) {
                                JSONObject json = ja.getJSONObject(j);
                                arr.add(json.getString("name"));
                            }

                           }
 }}catch block...
 

Комментарии:

1. но там будет бесконечный индекс 0,1,2,3…. так что я могу для этого сделать?

2. но я думаю, вы сказали, что вам нужны только конкретные данные индекса. (Итак, я имею в виду, что ваша проблема в том, что когда вы добавляете в список, вам нужно определить конкретный индекс)

3. Итак, для этого вам, возможно, потребуется создать класс модели.

4. Нет, я хочу только конкретные данные по конкретному индексу у вас есть какое-либо решение, пожалуйста, помогите мне

5. вы хотите получить все данные, но, с другой стороны, вам нужны только конкретные данные индекса, когда вам это нужно, верно?

Ответ №2:

                int i=gotIndex;//here you can give your exact index that you want
                            JSONObject jsonObject = jsonArray.getJSONObject(i);

                           
                            String p_name = jsonObject.getString("name");

                             ArrayList<String> arr = new ArrayList<>();

                            JSONArray ja = jsonObject.getJSONArray("fields");
                            int len = ja.length();

                            for (int j = 0; j < len; j  ) {
                                JSONObject json = ja.getJSONObject(j);
                                arr.add(json.getString("name"));
                            }
 

здесь вы использовали цикл вы можете использовать объект json вне цикла с использованием номера индекса i (JSONObject = JSONArray.getJSONObject(i))

Комментарии:

1. но мне нужны данные следующего массива, что означает индекс 1 после 0 данных, вот почему я использовал любое решение цикла? @Аджайкс

2. в чем ваша настоящая проблема?

3. см. Вопрос, мне нужны данные массива «поля» определенного индекса, под которым указана только строка имен объектов

4. смотрите, теперь вы поймете, что я обновил свой вопрос @AjayKS

5. Я думаю, что код верен, и ваш метод печати или что-то в этом роде неверен, логика, которую вы упомянули, верна. метод реализации неверен.