Как разобрать JSON в модификации с динамическим ключом, используя динамический идентификатор - PullRequest
0 голосов
/ 12 декабря 2018

В моем проекте используется модернизация, и он вообще работает правильно.

Но теперь возникла потребность использовать динамический Json, где его ключом является только ID, я исследовал везде и не нашел ничего, что могло быпомогите мне.

Как я могу "разобрать" этот json в моей модели класса?

Здесь ссылка на Json

Здесьчасть Json

[  
   {  
      "1":{  
         "1":"Paulo, chamado para ser apóstolo de Jesus Cristo pela vontade de Deus, e o irmão Sóstenes,",
         "2":"à igreja de Deus que está em Corinto, aos santificados em Cristo Jesus, chamados para serem santos, com todos os que em todo lugar invocam o nome de nosso Senhor Jesus Cristo, Senhor deles e nosso:",
         "3":"Graça seja convosco, e paz, da parte de Deus nosso Pai, e do Senhor Jesus Cristo.",
         "4":"Sempre dou graças a Deus por vós, pela graça de Deus que vos foi dada em Cristo Jesus;",
         "5":"porque em tudo fostes enriquecidos nele, em toda palavra e em todo o conhecimento,",
         "6":"assim como o testemunho de Cristo foi confirmado entre vós;",
         "7":"de maneira que nenhum dom vos falta, enquanto aguardais a manifestação de nosso Senhor Jesus Cristo,",
         "8":"o qual também vos confirmará até o fim, para serdes irrepreensíveis no dia de nosso Senhor Jesus Cristo.",
         "9":"Fiel é Deus, pelo qual fostes chamados para a comunhão de seu Filho Jesus Cristo nosso Senhor.",
         "10":"Rogo-vos, irmãos, em nome de nosso Senhor Jesus Cristo, que sejais concordes no falar, e que não haja dissensões entre vós; antes sejais unidos no mesmo pensamento e no mesmo parecer.",
         "11":"Pois a respeito de vós, irmãos meus, fui informado pelos da família de Cloé que há contendas entre vós.",
         "12":"Quero dizer com isto, que cada um de vós diz: Eu sou de Paulo; ou, Eu de Apolo; ou Eu sou de Cefas; ou, Eu de Cristo.",
         "13":"será que Cristo está dividido? foi Paulo crucificado por amor de vós? ou fostes vós batizados em nome de Paulo?",
         "14":"Dou graças a Deus que a nenhum de vós batizei, senão a Crispo e a Gaio;",
         "15":"para que ninguém diga que fostes batizados em meu nome.",
         "16":"É verdade, batizei também a família de Estéfanas, além destes, não sei se batizei algum outro.",
         "17":"Porque Cristo não me enviou para batizar, mas para pregar o evangelho; não em sabedoria de palavras, para não se tornar vã a cruz de Cristo.",
         "18":"Porque a palavra da cruz é deveras loucura para os que perecem; mas para nós, que somos salvos, é o poder de Deus.",
         "19":"porque está escrito: Destruirei a sabedoria dos sábios, e aniquilarei a sabedoria o entendimento dos entendidos.",
         "20":"Onde está o sábio? Onde o escriba? Onde o questionador deste século? Porventura não tornou Deus louca a sabedoria deste mundo?",
         "21":"Visto como na sabedoria de Deus o mundo pela sua sabedoria não conheceu a Deus, aprouve a Deus salvar pela loucura da pregação os que crêem.",
         "22":"Pois, enquanto os judeus pedem sinal, e os gregos buscam sabedoria,",
         "23":"nós pregamos a Cristo crucificado, que é escândalo para os judeus, e loucura para os gregos,",
         "24":"mas para os que são chamados, tanto judeus como gregos, Cristo, poder de Deus, e sabedoria de Deus.",
         "25":"Porque a loucura de Deus é mais sábia que os homens; e a fraqueza de Deus é mais forte que os homens.",
         "26":"Ora, vede, irmãos, a vossa vocação, que não são muitos os sábios segundo a carne, nem muitos os poderosos. nem muitos os nobres que são chamados.",
         "27":"Pelo contrário, Deus escolheu as coisas loucas do mundo para confundir os sábios; e Deus escolheu as coisas fracas do mundo para confundir as fortes;",
         "28":"e Deus escolheu as coisas ignóbeis do mundo, e as desprezadas, e as que não são, para reduzir a nada as que são;",
         "29":"para que nenhum mortal se glorie na presença de Deus.",
         "30":"Mas vós sois dele, em Cristo Jesus, o qual para nós foi feito por Deus sabedoria, e justiça, e santificação, e redenção;",
         "31":"para que, como está escrito: Aquele que se gloria, glorie-se no Senhor."
      }
   },
   {  
      "2":{  
         "1":"E eu, irmãos, quando fui ter convosco, anunciando-vos o testemunho de Deus, não fui com sublimidade de palavras ou de sabedoria.",
         "2":"Porque nada me propus saber entre vós, senão a Jesus Cristo, e este crucificado.",
         "3":"E eu estive convosco em fraqueza, e em temor, e em grande tremor.",
         "4":"A minha linguagem e a minha pregação não consistiram em palavras persuasivas de sabedoria, mas em demonstração do Espírito de poder;",
         "5":"para que a vossa fé não se apoiasse na sabedoria dos homens, mas no poder de Deus.",
         "6":"Na verdade, entre os perfeitos falamos sabedoria, não porém a sabedoria deste mundo, nem dos príncipes deste mundo, que estão sendo reduzidos a nada;",
         "7":"mas falamos a sabedoria de Deus em mistério, que esteve oculta, a qual Deus preordenou antes dos séculos para nossa glória;",
         "8":"a qual nenhum dos príncipes deste mundo compreendeu; porque se a tivessem compreendido, não teriam crucificado o Senhor da glória.",
         "9":"Mas, como está escrito: As coisas que olhos não viram, nem ouvidos ouviram, nem penetraram o coração do homem, são as que Deus preparou para os que o amam.",
         "10":"Porque Deus no-las revelou pelo seu Espírito; pois o Espírito esquadrinha todas as coisas, mesmos as profundezas de Deus.",
         "11":"Pois, qual dos homens entende as coisas do homem, senão o espírito do homem que nele está? assim também as coisas de Deus, ninguém as compreendeu, senão o Espírito de Deus.",
         "12":"Ora, nós não temos recebido o espírito do mundo, mas sim o Espírito que provém de Deus, a fim de compreendermos as coisas que nos foram dadas gratuitamente por Deus;",
         "13":"as quais também falamos, não com palavras ensinadas pela sabedoria humana, mas com palavras ensinadas pelo Espírito Santo, comparando coisas espirituais com espirituais.",
         "14":"Ora, o homem natural não aceita as coisas do Espírito de Deus, porque para ele são loucura; e não pode entendê-las, porque elas se discernem espiritualmente.",
         "15":"Mas o que é espiritual discerne bem tudo, enquanto ele por ninguém é discernido.",
         "16":"Pois, quem jamais conheceu a mente do Senhor, para que possa instruí-lo? Mas nós temos a mente de Cristo."
      }
   },
   {  
      "3":{  
         "1":"E eu, irmãos não vos pude falar como a espirituais, mas como a carnais, como a criancinhas em Cristo.",
         "2":"Leite vos dei por alimento, e não comida sólida, porque não a podíeis suportar; nem ainda agora podeis;",
         "3":"porquanto ainda sois carnais; pois, havendo entre vós inveja e contendas, não sois porventura carnais, e não estais andando segundo os homens?",
         "4":"Porque, dizendo um: Eu sou de Paulo; e outro: Eu de Apolo; não sois apenas homens?",
         "5":"Pois, que é Apolo, e que é Paulo, senão ministros pelos quais crestes, e isso conforme o que o Senhor concedeu a cada um?",
         "6":"Eu plantei; Apolo regou; mas Deus deu o crescimento.",
         "7":"De modo que, nem o que planta é alguma coisa, nem o que rega, mas Deus, que dá o crescimento.",
         "8":"Ora, uma só coisa é o que planta e o que rega; e cada um receberá o seu galardão segundo o seu trabalho.",
         "9":"Porque nós somos cooperadores de Deus; vós sois lavoura de Deus e edifício de Deus.",
         "10":"Segundo a graça de Deus que me foi dada, lancei eu como sábio construtor, o fundamento, e outro edifica sobre ele; mas veja cada um como edifica sobre ele.",
         "11":"Porque ninguém pode lançar outro fundamento, além do que já está posto, o qual é Jesus Cristo.",
         "12":"E, se alguém sobre este fundamento levanta um edifício de ouro, prata, pedras preciosas, madeira, feno, palha,",
         "13":"a obra de cada um se manifestará; pois aquele dia a demonstrará, porque será revelada no fogo, e o fogo provará qual seja a obra de cada um.",
         "14":"Se permanecer a obra que alguém sobre ele edificou, esse receberá galardão.",
         "15":"Se a obra de alguém se queimar, sofrerá ele prejuízo; mas o tal será salvo todavia como que pelo fogo.",
         "16":"Não sabeis vós que sois santuário de Deus, e que o Espírito de Deus habita em vós?",
         "17":"Se alguém destruir o santuário de Deus, Deus o destruirá; porque sagrado é o santuário de Deus, que sois vós.",
         "18":"Ninguém se engane a si mesmo; se alguém dentre vós se tem por sábio neste mundo, faça-se louco para se tornar sábio.",
         "19":"Porque a sabedoria deste mundo é loucura diante de Deus; pois está escrito: Ele apanha os sábios na sua própria astúcia;",
         "20":"e outra vez: O Senhor conhece as cogitações dos sábios, que são vãs.",
         "21":"Portanto ninguém se glorie nos homens; porque tudo é vosso;",
         "22":"seja Paulo, ou Apolo, ou Cefas; seja o mundo, ou a vida, ou a morte; sejam as coisas presentes, ou as vindouras, tudo é vosso,",
         "23":"e vós de Cristo, e Cristo de Deus."
      }
   },

У меня уже есть несколько служб, работающих под управлением corertamente с использованием Retrofit.

Моя проблема в том, как разобрать этот json Как будет выглядеть моя модель класса?

Вот еще один сервис, который у меня есть, но в этом случае я уже знаю поля моего json

public class Biblia {
    @SerializedName("id")
    private int id;
    @SerializedName("categoria")
    private String categoria;
    @SerializedName("descricao")
    private String descricao;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

}

Activity

        apiInterface = ApiClient.getClient().create(ApiInterface.class);

        Call<List<Biblia>> call = apiInterface.getBiblia(Integer.parseInt(Constants.APP_ID));
        call.enqueue(new Callback<List<Biblia>>() {
            @Override
            public void onResponse(Call<List<Biblia>> call, Response<List<Biblia>> response) {

                if(response.isSuccessful()) {
                    contacts = response.body();
                    cateRecyclerAdapter = new BibliaAdapter(contacts,getActivity());
                    recyclerView.setAdapter(cateRecyclerAdapter);
                    cateRecyclerAdapter.notifyDataSetChanged();

                    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
/*                    DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                            linearLayoutManager.getOrientation());*/
                    recyclerView.setLayoutManager(linearLayoutManager);
                    //recyclerView.addItemDecoration(dividerItemDecoration);
                }else{

                }


            }

Извинитедля английского и как я пытался аргументировать свою проблему.Но что действительно нужно знать, так это то, что это JSON с модификацией

1 Ответ

0 голосов
/ 12 декабря 2018

Это особенно странно сформированный ответ JSON.Давайте немного подрежем его, чтобы увидеть общую структуру.

[  
   {  
      "1":{  
         "1":"Paulo, chamado para ser apóstolo de Jesus Cristo pela vontade de Deus, e o irmão Sóstenes,",
         "2":"à igreja de Deus que está em Corinto, aos santificados em Cristo Jesus, chamados para serem santos, com todos os que em todo lugar invocam o nome de nosso Senhor Jesus Cristo, Senhor deles e nosso:",
         ...
      }
   },
   {  
      "2":{  
         "1":"E eu, irmãos, quando fui ter convosco, anunciando-vos o testemunho de Deus, não fui com sublimidade de palavras ou de sabedoria.",
         "2":"Porque nada me propus saber entre vós, senão a Jesus Cristo, e este crucificado.",
         ...
      }
   },
   ...
}

На верхнем уровне это список объектов.Каждый объект среднего уровня имеет одну пару строка-объект.Каждый внутренний объект имеет много пар строка-строка.

Каждый раз, когда вы работаете с «динамическими ключами», вы можете подумать об использовании Map<String, Object> вместо предопределенного класса Java.Мы собираемся сделать это как для объектов среднего уровня, так и для самых внутренних объектов, поскольку у обоих есть динамические ключи.

Это означает, что общая структура равна List<Map<String, Map<String, String>>>.Это очень плохо, что мы не можем лучше определить вещи, чем это, но это реальный мир, и иногда вещи грубые.

Так что сделайте Call<List<Map<String, Map<String, String>>>>, и тогда вы сможете получить (из нашего примера) эта строка:

"Paulo, chamado para ser apóstolo de Jesus Cristo pela vontade de Deus, e o irmão Sóstenes,

путем индексации в списке и отображений:

Map<String, Map<String, String>> firstMidLevel = response.body.get(0);
Map<String, String> inner = firstMidLevel.get("1");
String paulo = inner.get("1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...