Stack Overflow на русском Asked by Tagir Idrisov on November 27, 2020
На сервере лежит (как я понял) объект. В нем 2 значения – текст и цвет этого текста. Так вот – мне нужно получить этот текст и цвет. В данный момент все выводится вместе – TextView передается значение [{"text":"ВЕРНЕМ 10% БОНУСАМИ", "textColor": "#4c82a6"}],.
Мне нужно получить эти значения по отдельности
"tag": [
{
"text": "ВЕРНЕМ 10% БОНУСАМИ",
"textColor": "#4c82a6"
}
],
Модель
public class Item {
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("image")
@Expose
private String image;
@SerializedName("isFavorite")
@Expose
private boolean isFavorite;
@SerializedName("prices")
@Expose
private Prices prices;
@SerializedName("full_set_prices")
@Expose
private Object fullSetPrices;
@SerializedName("isBestPrice")
@Expose
private boolean isBestPrice;
@SerializedName("tag")
@Expose
private Object tag;
@SerializedName("articul")
@Expose
private String articul;
@SerializedName("rating")
@Expose
private double rating;
@SerializedName("numberOfReviews")
@Expose
private int numberOfReviews;
@SerializedName("statusText")
@Expose
private String statusText;
@SerializedName("isAvailable")
@Expose
private boolean isAvailable;
@SerializedName("images")
@Expose
private List<String> images = null;
@SerializedName("categoryId")
@Expose
private String categoryId;
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getImage() {
return image;
}
public boolean isIsFavorite() {
return isFavorite;
}
public Prices getPrices() {
return prices;
}
public Object getFullSetPrices() {
return fullSetPrices;
}
public boolean isIsBestPrice() {
return isBestPrice;
}
public Object getTag() {
return tag;
}
public void setTag(Object tag) {
this.tag = tag;
}
public String getArticul() {
return articul;
}
public void setArticul(String articul) {
this.articul = articul;
}
public double getRating() {
return rating;
}
public void setRating(double rating) {
this.rating = rating;
}
public int getNumberOfReviews() {
return numberOfReviews;
}
public void setNumberOfReviews(int numberOfReviews) {
this.numberOfReviews = numberOfReviews;
}
public String getStatusText() {
return statusText;
}
public void setStatusText(String statusText) {
this.statusText = statusText;
}
public boolean isIsAvailable() {
return isAvailable;
}
public void setIsAvailable(boolean isAvailable) {
this.isAvailable = isAvailable;
}
public List<String> getImages() {
return images;
}
public void setImages(List<String> images) {
this.images = images;
}
public String getCategoryId() {
return categoryId;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
}
Каким образом распарсить object?
По факту вам нужно обработать json массив состоящий из объектов:
"tag": [
{
"text": "ВЕРНЕМ 10% БОНУСАМИ",
"textColor": "#4c82a6"
}
],
для этого я бы создал класс для хранения объектов:
public class TextFeatures{
String text;
String color;
}
дальше после получения json текста вам нужно будет десериализовать:
ObjectMapper mapper = new ObjectMapper();
MyClass[] myObjects = mapper.readValue(json, TextFeatures[].class);
либо так:
List<MyClass> myObjects = mapper.readValue(jsonInput, new TypeReference<List<MyClass>>(){});
Подобный вопрос. Вот есть гайды по работе с json. Инструмент для создания классов-моделей. Туториал 1 и туториал 2
Можно кстати и в ваш основной класс модель добавить такую обработку tag:
@SerializedName("tag")
@Expose
private Object tag;
ваш код создает объект, а можно сразу создавать массив:
@SerializedName("tag")
@Expose
private ArrayList<TextFeatures> tag;
и дальше брать данные из массива напрямую через ответ сервера.
Correct answer by Andrew on November 27, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP