【问题标题】:Parsing of multiple Arrays in android在android中解析多个数组
【发布时间】:2019-03-14 00:48:40
【问题描述】:

请告诉我如何解析这个模型,我是 android 的新手。我试过这样:-

{“错误”:假​​,“响应”:{“comdata”:[{“id”:“35”,“地址”:“地址”}],“empdata”:[{“cid”:“ 33”,“comid”:“35”,“empname”:“test”,“empdob”:“0000-00-00”},{“cid”:“33”,“comid”:“35”,“ empname": "test", "empdob": "0000-00-00" }] }

Gson gson = new Gson();
            String json = gson.toJson(result);
            JSONObject jObj = new JSONObject(json);
            if (jObj.getString("error").equalsIgnoreCase("false")) {
                JSONObject object = jObj.getJSONObject("response");
                for (int i = 0; i < object.length(); i++) {
                JSONArray jsonArray = object.getJSONArray("parentdata");
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    //Something write here
                    JSONArray jsonArray1 = object.getJSONArray("childata");
                    for (int a = 0; a < jsonArray1.length(); a++) {
                        JSONObject object1 = jsonArray1.getJSONObject(a);
                      } return "true";
                    }return "true";
                   }else{
                          }

【问题讨论】:

  • 无效JSON你可以在这里查看jsonlint.com
  • 您的JSON 无效,请在此处查看 (jsoneditoronline.org)
  • 是的,这是错误的,但@César Ferreira 让它正确,请检查并告诉我如何解析这个。

标签: java android arrays parsing


【解决方案1】:

您的 JSON 无效,正确的 JSON 将如下所示。

{
  "error": false,
  "response": {
    "comdata": [
      {
        "id": "35",
        "address": "Address"
      }
    ],
    "empdata": [
      {
        "cid": "33",
        "comid": "35",
        "empname": "test",
        "empdob": "0000-00-00"
      },
      {
        "cid": "33",
        "comid": "35",
        "empname": "test",
        "empdob": "0000-00-00"
      }
    ]
  }
}

您可以使用以下代码解析 JSON。

 private void parseResponse(String result) {
        try {
            JSONObject jsonObject = new JSONObject(result);
            if (jsonObject.getBoolean("error")) {
                JSONObject response = jsonObject.getJSONObject("response");
                JSONArray jsonArray1 = response.getJSONArray("comdata");
                List<ComData> comdataList = new ArrayList<>();
                for (int i = 0; i < jsonArray1.length(); i++) {
                    ComData comData = new ComData();
                    comData.setId(jsonArray1.getJSONObject(i).getString("id"));
                    comData.setAddress(jsonArray1.getJSONObject(i).getString("address"));
                    comdataList.add(comData);

                }
                JSONArray jsonArray2 = response.getJSONArray("empdata");
                List<EmpData> empdataList = new ArrayList<>();
                for (int i = 0; i < jsonArray2.length(); i++) {
                    EmpData empData = new EmpData();
                    empData.setCid(jsonArray2.getJSONObject(i).getString("cid"));
                    empData.setComid(jsonArray2.getJSONObject(i).getString("comid"));
                    empData.setEmpname(jsonArray2.getJSONObject(i).getString("empname"));
                    empData.setEmpdob(jsonArray2.getJSONObject(i).getString("empdob"));
                    empdataList.add(empData);

                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

}

或者您可以使用 GSON 轻松将 JSON 解析为 POJO,请参阅 César Ferreira's 答案。

【讨论】:

  • 我按照您的回答完成了,但它显示错误:- com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY 但在第 1 行第 28 列路径 $.response 处为 BEGIN_OBJECT
  • 哪一行出错了?如果您指定确切的行而不是行号,这将很有帮助。
【解决方案2】:

你的 JSON 无效,你应该有这样的东西:

{
    "error": false,
    "response": {
        "comdata": [{
            "id": "10",
            "username": null,
            "email": "example@gmail.com"
        }],
        "empdata": [{
            "eid": "33",
            "empname": "test",
            "empdob": "0000-00-00",
            "empgender": "test",
            "empphoto": ""
        }],
        "someData": [{
            "eid": "34",
            "empname": "test",
            "empdob": "0000-00-00",
            "empgender": "test",
            "empphoto": ""
        }]
    }
}

属性someData我必须添加它,所以它是一个有效的JSON,我不知道它是否符合你的要求。

您可以使用jsonschematopojo 生成这样的类:

Comdatum 类

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Comdatum {

@SerializedName("id")
@Expose
private String id;
@SerializedName("username")
@Expose
private Object username;
@SerializedName("email")
@Expose
private String email;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public Object getUsername() {
return username;
}

public void setUsername(Object username) {
this.username = username;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

}

数据类

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Data {

@SerializedName("error")
@Expose
private Boolean error;
@SerializedName("response")
@Expose
private Response response;

public Boolean getError() {
return error;
}

public void setError(Boolean error) {
this.error = error;
}

public Response getResponse() {
return response;
}

public void setResponse(Response response) {
this.response = response;
}

}

Empdatum 类

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import package com.example;

public class Empdatum {

@SerializedName("eid")
@Expose
private String eid;
@SerializedName("empname")
@Expose
private String empname;
@SerializedName("empdob")
@Expose
private String empdob;
@SerializedName("empgender")
@Expose
private String empgender;
@SerializedName("empphoto")
@Expose
private String empphoto;

public String getEid() {
return eid;
}

public void setEid(String eid) {
this.eid = eid;
}

public String getEmpname() {
return empname;
}

public void setEmpname(String empname) {
this.empname = empname;
}

public String getEmpdob() {
return empdob;
}

public void setEmpdob(String empdob) {
this.empdob = empdob;
}

public String getEmpgender() {
return empgender;
}

public void setEmpgender(String empgender) {
this.empgender = empgender;
}

public String getEmpphoto() {
return empphoto;
}

public void setEmpphoto(String empphoto) {
this.empphoto = empphoto;
}

}

响应类 包 com.example;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Response {

@SerializedName("comdata")
@Expose
private List<Comdatum> comdata = null;
@SerializedName("empdata")
@Expose
private List<Empdatum> empdata = null;
@SerializedName("someData")
@Expose
private List<SomeDatum> someData = null;

public List<Comdatum> getComdata() {
return comdata;
}

public void setComdata(List<Comdatum> comdata) {
this.comdata = comdata;
}

public List<Empdatum> getEmpdata() {
return empdata;
}

public void setEmpdata(List<Empdatum> empdata) {
this.empdata = empdata;
}

public List<SomeDatum> getSomeData() {
return someData;
}

public void setSomeData(List<SomeDatum> someData) {
this.someData = someData;
}

}

SomeDatum 类 包 com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class SomeDatum {

@SerializedName("eid")
@Expose
private String eid;
@SerializedName("empname")
@Expose
private String empname;
@SerializedName("empdob")
@Expose
private String empdob;
@SerializedName("empgender")
@Expose
private String empgender;
@SerializedName("empphoto")
@Expose
private String empphoto;

public String getEid() {
return eid;
}

public void setEid(String eid) {
this.eid = eid;
}

public String getEmpname() {
return empname;
}

public void setEmpname(String empname) {
this.empname = empname;
}

public String getEmpdob() {
return empdob;
}

public void setEmpdob(String empdob) {
this.empdob = empdob;
}

public String getEmpgender() {
return empgender;
}

public void setEmpgender(String empgender) {
this.empgender = empgender;
}

public String getEmpphoto() {
return empphoto;
}

public void setEmpphoto(String empphoto) {
this.empphoto = empphoto;
}

}

然后你可以这样做:

String jsonString = "Your JSON String";
Gson converter = new Gson();
Data settingsdata = converter.fromJson(jsonString , Data.class);

【讨论】:

  • 是的,这是正确的,现在告诉我如何解析这个
  • 如果有帮助,我已更新我的答案,将其标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2017-04-15
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
相关资源
最近更新 更多