首页 > 解决方案 > 如何使用动态 id 使用动态密钥在改造中解析 json

问题描述

在我的项目中使用改造,它完全正常工作。

但是现在已经出现了使用动态 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."
      }
   },

我已经使用 Retrofit 运行了所有几个运行 corertamente 的服务。

我的问题是如何解析这个 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;
    }

}

活动

        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

标签: androidretrofitretrofit2

解决方案


这是一个特别奇怪的 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.",
         ...
      }
   },
   ...
}

在顶层,这是一个对象列表。每个中级对象都有一个字符串-对象对。每个内部对象都有许多字符串-字符串对。

每当您使用“动态键”时,您都可以考虑使用 aMap<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");

推荐阅读