Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在模型中表示此结构?_Android_Json_Retrofit2 - Fatal编程技术网

Android 如何在模型中表示此结构?

Android 如何在模型中表示此结构?,android,json,retrofit2,Android,Json,Retrofit2,我使用改型2来获取博客新闻,每个新闻都有n学习西班牙语的练习,其代码结构如下: 练习反应部分 "exercises": { "number_of_exercises": 2, "exercise1": { "title": "Ejercicio de comprensión B.1 (Comprehension B.1)", "question1": "La noticia habla...", "answer1_1": "

我使用改型2来获取博客新闻,每个新闻都有n学习西班牙语的练习,其代码结构如下:

练习反应部分

"exercises": {
      "number_of_exercises": 2,
      "exercise1": {
        "title": "Ejercicio de comprensión B.1 (Comprehension B.1)",
        "question1": "La noticia habla...",
        "answer1_1": "de un test para evaluar la inteligencia humana.",
        "answer1_2": "de un descubrimiento científico relacionado con el ser humano.",
        "answer1_3": "del descubrimiento de una nueva especie animal.",
        "correctAnswer1": "de un descubrimiento científico relacionado con el ser humano.",
        "question2": "Los genes identificados...",
        "answer2_1": "pueden explicar algunos comportamientos sociales del ser humano.",
        "answer2_2": "explican el funcionamiento completo del cerebro.",
        "answer2_3": "están relacionados con la inteligencia.",
        "correctAnswer2": "están relacionados con la inteligencia.",
        "question3": "Este descubrimiento...",
        "answer3_1": "no aportará nada a las investigaciones sobre el cerebro.",
        "answer3_2": "podría ofrecer nuevos datos sobre el funcionamiento del cerebro.",
        "answer3_3": "no es muy importante para la biología.",
        "correctAnswer3": "podría ofrecer nuevos datos sobre el funcionamiento del cerebro.",
        "question4": "Según el texto, los científicos ya saben todo sobre los procesos cognitivos.",
        "answer4_1": "No se sabe.",
        "answer4_2": "Verdadero.",
        "answer4_3": "Falso.",
        "correctAnswer4": "Falso."
      },
      "exercise2": {
        "title": "Ejercicio de vocabulario B.2 (Vocabulary B.2)",
        "question1": "Relacionas 'cognitivo' con...",
        "answer1_1": "la empatía.",
        "answer1_2": "el conocimiento.",
        "answer1_3": "una congestión.",
        "correctAnswer1": "el conocimiento.",
        "question2": "'Cohorte' es igual que...",
        "answer2_1": "'conjunto'.",
        "answer2_2": "'comprensión'.",
        "answer2_3": "'finalización'.",
        "correctAnswer2": "'conjunto'.",
        "question3": "Lo contrario de 'específico' es...",
        "answer3_1": "'genérico'.",
        "answer3_2": "'aleatorio'.",
        "answer3_3": "'concreto'.",
        "correctAnswer3": "'genérico'.",
        "question4": "El 'genoma' está relacionado con el ADN.",
        "answer4_1": "No se sabe.",
        "answer4_2": "Falso.",
        "answer4_3": "Verdadero.",
        "correctAnswer4": "Verdadero."
      }
    }
由于练习的数量不同(有时是一个或多个),我不知道如何在课堂上用它们的结构类型来表示它们

你们能帮帮我吗

我已经尝试创建一个类,但是使用子类Exercise1、Exercise2等。。。我正在寻找完成此要求的最佳方法

尝试以下方法:

try {
    ArrayList<Exercise> exercises = new ArrayList<>();
    JSONObject json = new JSONObject(yourJson);
    int exerciseQuantity = json.getInt("number_of_exercises");
    for (int i = 1; i <= exerciseQuantity; i++) {
        Exercise e = json.get("exercise".concat(String.valueOf(i)));
        if (e != null) {
            exercises.add(e);
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}
试试看{
ArrayList练习=新建ArrayList();
JSONObject json=新的JSONObject(yourJson);
int exerciseQuantity=json.getInt(“练习的数量”);

对于(inti=1;i如果您使用的是改装,那么您可能也在使用Gson。 至少,Gson允许实现美妙的东西,即使对于设计糟糕的JSON文档也是如此

首先,您可以设计适当的对象模型,以方便使用

final类ExerciseWrapper{
最后清单练习;
练习包装器(最终列表练习){
这个。练习=练习;
}
}
期末练习{
最后的字符串标题;
最后问题清单;
练习(最后的字符串标题,最后的问题列表){
this.title=标题;
这个。问题=问题;
}
}
最后的课堂问题{
最后一道弦乐题;
最终答案清单;
最终答案;
问题(最终字符串问题、最终列表答案、最终整数更正答案){
这个问题=问题;
这个。答案=答案;
this.correctAnswer=correctAnswer;
}
}
现在,定义一些接口来实现反序列化程序的各种策略。 这些都是琐碎的,如果你有任何类似的东西,你可以使用它们(例如,如果你使用的是谷歌番石榴,只需使用
函数
供应商

接口IFunction{
R应用(T);
}
接口供应商{
T get();
}
接下来,如果给定的JSON设计良好,您必须“取消设置”应该是数组的属性。 下面的
extract
方法尝试迭代每个对象属性,并检查它是否可以提取索引。 如果提取索引,他们会尝试确保列表大小足以容纳所有元素。 一旦列表大小合适,他们就会尝试通过策略从其他地方获取值

最终类提取器{
私人提取器(){
}
静态列表提取(
最终JsonObject JsonObject,

最终IFunctionYou json必须返回一个练习数组,而不是一个可变数量的属性。是的,@Jonathanase会很好,但遗憾的是,客户不打算对API进行更改:-(理想情况下,
练习
问题
都应该是数组。问题对象将包含一个可能的答案数组
private static final Gson gson = new GsonBuilder()
        .registerTypeAdapter(ExerciseWrapper.class, getExerciseWrapperJsonDeserializer())
        .registerTypeAdapter(Exercise.class, getExerciseJsonDeserializer())
        .setPrettyPrinting()
        .create();

public static void main(final String... args)
        throws IOException {
    try ( final JsonReader jsonReader = getPackageResourceJsonReader(Q44165271.class, "exercise.json") ) {
        final ExerciseWrapper exerciseWrapper = gson.fromJson(jsonReader, ExerciseWrapper.class);
        exerciseWrapper.exercises.forEach(exercise -> {
            System.out.println(exercise.title);
            exercise.questions.forEach(question -> {
                System.out.println("\t" + question.question);
                question.answers.forEach(answer -> System.out.println("\t\t" + answer));
                System.out.println("\t" + (question.correctAnswer + 1));
            });
        });
        System.out.println("-----");
        System.out.println(gson.toJson(exerciseWrapper));
    }
}
Ejercicio de comprensión B.1 (Comprehension B.1)
    La noticia habla...
        de un test para evaluar la inteligencia humana.
        de un descubrimiento científico relacionado con el ser humano.
        del descubrimiento de una nueva especie animal.
    2
    Los genes identificados...
        pueden explicar algunos comportamientos sociales del ser humano.
        explican el funcionamiento completo del cerebro.
        están relacionados con la inteligencia.
    3
    Este descubrimiento...
        no aportará nada a las investigaciones sobre el cerebro.
        podría ofrecer nuevos datos sobre el funcionamiento del cerebro.
        no es muy importante para la biología.
    2
    Según el texto, los científicos ya saben todo sobre los procesos cognitivos.
        No se sabe.
        Verdadero.
        Falso.
    3
Ejercicio de vocabulario B.2 (Vocabulary B.2)
    Relacionas 'cognitivo' con...
        la empatía.
        el conocimiento.
        una congestión.
    2
    'Cohorte' es igual que...
        'conjunto'.
        'comprensión'.
        'finalización'.
    1
    Lo contrario de 'específico' es...
        'genérico'.
        'aleatorio'.
        'concreto'.
    1
    El 'genoma' está relacionado con el ADN.
        No se sabe.
        Falso.
        Verdadero.
    3
-----
{
  "exercises": [
    {
      "title": "Ejercicio de comprensión B.1 (Comprehension B.1)",
      "questions": [
        {
          "question": "La noticia habla...",
          "answers": [
            "de un test para evaluar la inteligencia humana.",
            "de un descubrimiento científico relacionado con el ser humano.",
            "del descubrimiento de una nueva especie animal."
          ],
          "correctAnswer": 1
        },
        {
          "question": "Los genes identificados...",
          "answers": [
            "pueden explicar algunos comportamientos sociales del ser humano.",
            "explican el funcionamiento completo del cerebro.",
            "están relacionados con la inteligencia."
          ],
          "correctAnswer": 2
        },
        {
          "question": "Este descubrimiento...",
          "answers": [
            "no aportará nada a las investigaciones sobre el cerebro.",
            "podría ofrecer nuevos datos sobre el funcionamiento del cerebro.",
            "no es muy importante para la biología."
          ],
          "correctAnswer": 1
        },
        {
          "question": "Según el texto, los científicos ya saben todo sobre los procesos cognitivos.",
          "answers": [
            "No se sabe.",
            "Verdadero.",
            "Falso."
          ],
          "correctAnswer": 2
        }
      ]
    },
    {
      "title": "Ejercicio de vocabulario B.2 (Vocabulary B.2)",
      "questions": [
        {
          "question": "Relacionas \u0027cognitivo\u0027 con...",
          "answers": [
            "la empatía.",
            "el conocimiento.",
            "una congestión."
          ],
          "correctAnswer": 1
        },
        {
          "question": "\u0027Cohorte\u0027 es igual que...",
          "answers": [
            "\u0027conjunto\u0027.",
            "\u0027comprensión\u0027.",
            "\u0027finalización\u0027."
          ],
          "correctAnswer": 0
        },
        {
          "question": "Lo contrario de \u0027específico\u0027 es...",
          "answers": [
            "\u0027genérico\u0027.",
            "\u0027aleatorio\u0027.",
            "\u0027concreto\u0027."
          ],
          "correctAnswer": 0
        },
        {
          "question": "El \u0027genoma\u0027 está relacionado con el ADN.",
          "answers": [
            "No se sabe.",
            "Falso.",
            "Verdadero."
          ],
          "correctAnswer": 2
        }
      ]
    }
  ]
}