Преобразование json с дублированными ключами в gson

#android #json #kotlin #gson

#Android #json #kotlin #gson

Вопрос:

Я пытаюсь получить оба Ys в этой структуре JSON, используя gson и kotlin

 {
"y": {
       "x":"value",
       "y":"value"
     }
}
 

Первый, который я получил, используя этот код:

 @Expose
@SerializesName("y")
val y:String?
 

но во второй раз я не смог до него добраться.

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

1. Первый y — это карта, а не строка

2. это потому, что первый y является объектом

3. @Zoe это строка:( , но все же, если бы вы могли представить мне решение на случай, если это карта

4. @a_local_nobody да, так как я могу добраться до второго y?

5. Нет, первый y не является строкой. Это объект, как сказал a_local_nobody, который представлен в виде карты в Java. Второй y — это строка, и она хранится как ключ в карте первого y. Хотя я понятия не имею, как вы собираетесь это расширять (потому что я не знаю и не использую gson), в эквиваленте raw map вы получаете значение второго y с json["y"]["y"]

Ответ №1:

Первый Y — это object, а второй — string это модели, написанные на Java, просто скопируйте и вставьте их в android studio, и они преобразуют их в Kotlin

 public class Example {

@SerializedName("y")
@Expose
private Y y;

public Y getY() {
return y;
}

public void setY(Y y) {
this.y = y;
}

}
 

………………………………………

 public class Y {

@SerializedName("x")
@Expose
private String x;
@SerializedName("y")
@Expose
private String y;

public String getX() {
return x;
}

public void setX(String x) {
this.x = x;
}

public String getY() {
return y;
}

public void setY(String y) {
this.y = y;
}

}
 

В android studio есть плагины, которые могут конвертировать все классы Json в Pojo, вы должны попробовать их (например: JsonToKotlinClass)

Ответ №2:

Попробуйте, как показано ниже

 data class ObjectY(
    @SerializedName("x") val stringX: String,
    @SerializedName("y") val stringY: String,

    )

data class ResponseY(
    @SerializedName("y") val y: ObjectY,
    )