Я получаю данные из API и обращаюсь к ним с помощью GSON. У меня есть массив данных, поступающих из API, и он также содержит в себе объект.
Пример данных:
{
"data": [
{
"id": 3,
"company_id": "1",
"name_nl": "Showtrap trapreno laminaat Kahlua 2 treden Karwei 42x23x25cm",
"description": "",
"name_fr": "=ESCALIER DEMO MELAMINE 2MARCHES== = ",
"ean_code": "8711283406329",
"mbh": "1",
"msrp": "75",
"article_code": "00076",
"article_status": "nazorg",
"source": "Products",
"created_at": "2018-09-14 11:43:57",
"updated_at": "2018-09-14 11:43:57",
"company": {
"id": 1,
"name": "JEWE",
"franco_amount_product": "1500",
"mail_product": "[email protected]",
"status": "A",
"created_at": "2018-07-06 04:06:08",
"updated_at": "2018-10-23 14:07:59"
}
}
]
}
Я сгенерировал простые старые объекты Java из JSON и получил 2 файла datum.java, которые содержат все поля массива данных, кроме полей из объекта Компания. И один Company.java, содержащий все поля из объекта Компания.
У меня есть один метод в datum.java для доступа к объекту Company, т.е.
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
И Company.java
@SerializedName("name")
@Expose
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
вот так я создал свою модель. Я могу получить все поля массива данных, но не могу понять, как получить доступ к объекту компании из массива данных с помощью GSON.
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("M/d/yy hh:mm a");
gson = gsonBuilder.create();
JSONArray jsonArray = response.getJSONArray("data");
if (jsonArray.length() > 0) {
List<Datum> datumArrayList = new ArrayList<>();
datumArrayList = Arrays.asList(gson.fromJson(jsonArray.toString(), Datum[].class));
Log.e("TAG", "onResponse:datumArrayList "+datumArrayList.size() );
for(Datum datum : datumArrayList){
Log.e("TAG", "onResponse: "+datum.getCompany() );
}
Я хочу получить franco_amount_product из объекта компании. Как я могу получить Пожалуйста, помогите.
//Редактировать.
JSONArray jsonArray = response.getJSONArray("data");
if (jsonArray.length() > 0) {
List<Datum> datumArrayList = new ArrayList<>();
datumArrayList = Arrays.asList(gson.fromJson(jsonArray.toString(), Datum[].class));
Log.e("TAG", "onResponse:datumArrayList "+datumArrayList.size() );
ProductDetailsModel model = ProductDetailsModel.fromJson("data");
model.setData(datumArrayList);
for(Datum datum : model.getData()){
Log.e("TAG", "onResponse: " + datum.getCompany().getFrancoAmountProduct() + ""+datum.getEanCode());
}
Я отредактировал свой код, но сейчас не могу получить никаких значений. Как я могу получить доступ к значениям как данных, так и компании, поскольку мне нужно сохранить объединенные данные в базе данных
да @аминография
Вы должны создать класс модели для ответа, который обрабатывает всю строку json:
ResponseModel.java
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class ResponseModel {
@SerializedName("data")
private List<Datum> data = null;
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
public static ResponseModel fromJson(String json) {
return new Gson().fromJson(json, ResponseModel.class);
}
}
Теперь вы можете использовать его, как показано ниже, для анализа строки json:
ResponseModel model = ResponseModel.fromJson(jsonString);
// for example for item 0:
String francoAmountProduct = model.getData().get(0).getCompany().getFrancoAmountProduct();
В цикле for, подобном содержанию вопроса:
for(Datum datum : model.getData()){
Log.e("TAG", "onResponse: " + datum.getCompany().getFrancoAmountProduct());
}
get (0) --- что такое 0?
Ваш ответ содержит список объектов Datum. Я получаю 0-й элемент, например, чтобы показать, как достичь francoAmountProduct.
к чему относится "jsonString"?
jsonString - это ответ на вызов вашего веб-сервиса, ровно первая строка блока в вашем вопросе, который вы назвали: Пример данныхпроверьте мой // Редактируем код, так как я не могу получить значения
Проблема в том, что вы сделали это вручную: JSONArray jsonArray = response.getJSONArray("data"); Пожалуйста, передайте строку результата в ResponseModel.fromJson(jsonString);, как я, затем проверьте длину model.getData(), чтобы узнать, имеет ли массив содержимое или имеет нулевую длину.
Невозможно получить какие-либо данные с помощью ResponseModel.fromJson (jsonString), поскольку «данные» являются массивом, а не строковым объектом.
Я сделал ResponseModel responseModel = gson.fromJson ("данные", ResponseModel.class);
Пожалуйста, опубликуйте код, который сообщает, как получить объект response.
ваш Datum.java должен быть похож,
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Datum {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("company_id")
@Expose
private String companyId;
@SerializedName("name_nl")
@Expose
private String nameNl;
@SerializedName("description")
@Expose
private String description;
@SerializedName("name_fr")
@Expose
private String nameFr;
@SerializedName("ean_code")
@Expose
private String eanCode;
@SerializedName("mbh")
@Expose
private String mbh;
@SerializedName("msrp")
@Expose
private String msrp;
@SerializedName("article_code")
@Expose
private String articleCode;
@SerializedName("article_status")
@Expose
private String articleStatus;
@SerializedName("source")
@Expose
private String source;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
@SerializedName("company")
@Expose
private Company company;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCompanyId() {
return companyId;
}
public void setCompanyId(String companyId) {
this.companyId = companyId;
}
public String getNameNl() {
return nameNl;
}
public void setNameNl(String nameNl) {
this.nameNl = nameNl;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getNameFr() {
return nameFr;
}
public void setNameFr(String nameFr) {
this.nameFr = nameFr;
}
public String getEanCode() {
return eanCode;
}
public void setEanCode(String eanCode) {
this.eanCode = eanCode;
}
public String getMbh() {
return mbh;
}
public void setMbh(String mbh) {
this.mbh = mbh;
}
public String getMsrp() {
return msrp;
}
public void setMsrp(String msrp) {
this.msrp = msrp;
}
public String getArticleCode() {
return articleCode;
}
public void setArticleCode(String articleCode) {
this.articleCode = articleCode;
}
public String getArticleStatus() {
return articleStatus;
}
public void setArticleStatus(String articleStatus) {
this.articleStatus = articleStatus;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
}
Ваш Company.java,
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Company {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("franco_amount_product")
@Expose
private String francoAmountProduct;
@SerializedName("mail_product")
@Expose
private String mailProduct;
@SerializedName("status")
@Expose
private String status;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("updated_at")
@Expose
private String updatedAt;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFrancoAmountProduct() {
return francoAmountProduct;
}
public void setFrancoAmountProduct(String francoAmountProduct) {
this.francoAmountProduct = francoAmountProduct;
}
public String getMailProduct() {
return mailProduct;
}
public void setMailProduct(String mailProduct) {
this.mailProduct = mailProduct;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
}
Создайте ResponseModel.java вроде,
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class ResponseModel {
@SerializedName("data")
private List<Datum> data = null;
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
}
Затем получите объект своей компании, как показано ниже,
Gson gson = new Gson();
ResponseModel responseModel = gson.fromJson(jsonStr,ResponseModel.class);
for (int i=0;i<responseModel.getData().size();i++){
Company company = responseModel.getData().get(i).getCompany();
}
что такое get (0)?
будет цикл for для ваших «данных» jsonArray, я отредактировал свой код.
к чему относится "jsonString"?
Это ваша строка ответа API
проверьте мой // Редактируем код, так как я не могу получить значения
Вместо вашего // Edit code напишите код ... Gson gson = новый Gson (); ResponseModel responseModel = gson.fromJson (ответ, ResponseModel.class); for (int i = 0; i <responseModel.getData (). size (); i ++) {Company company = responseModel.getData (). get (i) .getCompany (); }
Вы сгенерировали calsses модели Gson с помощью jsonschema2pojo.org?