2 qq 33720124 qq_33720124 于 2016.02.23 10:11 提问

Android解析JSON数组,如果里面有两个数组,要怎么处理

项目中遇到服务器给的文档里面有两个数组
这样
{
"code":200,
"message":"调用成功",
"data":{
"mem_message_records":[
{
"message_disease_typeid":"1",
"message_disease_type":"心血管系统"
},
{
"message_disease_typeid":"2",
"message_disease_type":"外围血管疾病"
},
{
"message_disease_typeid":"3",
"message_disease_type":"脑血管疾病"
},
{
"message_disease_typeid":"4",
"message_disease_type":"肺部疾病"
},
{
"message_disease_typeid":"5",
"message_disease_type":"代谢疾病"
},
{
"message_disease_typeid":"6",
"message_disease_type":"周围神经疾病"
},
{
"message_disease_typeid":"7",
"message_disease_type":"其他疾病"
}
],
"mem_message_recordss":[
[
{
"message_diseaseid":"1",
"message_disease":"冠状动脉疾病"
},
{
"message_diseaseid":"2",
"message_disease":"心绞痛"
},
{
"message_diseaseid":"3",
"message_disease":"心肌梗死"
},
{
"message_diseaseid":"4",
"message_disease":"冠状动脉血运重建"
},
{
"message_diseaseid":"5",
"message_disease":"充血性心力衰竭"
}
],
[
{
"message_diseaseid":"6",
"message_disease":"闭塞性周围动脉粥样硬化"
},
{
"message_diseaseid":"7",
"message_disease":"血栓行静脉炎"
}
],
[
{
"message_diseaseid":"8",
"message_disease":"脑血栓"
},
{
"message_diseaseid":"9",
"message_disease":"短暂性脑供血不足"
},
{
"message_diseaseid":"10",
"message_disease":"脑出血"
}
],
[
{
"message_diseaseid":"11",
"message_disease":"慢性支气管炎"
},
{
"message_diseaseid":"12",
"message_disease":"慢性阻塞性肺病"
},
{
"message_diseaseid":"13",
"message_disease":"支气管哮喘"
},
{
"message_diseaseid":"14",
"message_disease":"间质性肺病"
},
{
"message_diseaseid":"15",
"message_disease":"囊性肺纤维化"
}
],
[
{
"message_diseaseid":"16",
"message_disease":"1型糖尿病"
},
{
"message_diseaseid":"17",
"message_disease":"2型糖尿病"
},
{
"message_diseaseid":"18",
"message_disease":"糖尿病肾病"
}
],
[
{
"message_diseaseid":"19",
"message_disease":"糖尿病性周围精神病"
},
{
"message_diseaseid":"20",
"message_disease":"自主神经性病变"
}
],
[
{
"message_diseaseid":"21",
"message_disease":"高血压"
},
{
"message_diseaseid":"22",
"message_disease":"视网膜病变"
},
{
"message_diseaseid":"23",
"message_disease":"恶性肿瘤"
},
{
"message_diseaseid":"24",
"message_disease":"脑卒中"
},
{
"message_diseaseid":"25",
"message_disease":"重性精神疾病"
},
{
"message_diseaseid":"26",
"message_disease":"结核病"
},
{
"message_diseaseid":"27",
"message_disease":"肝炎"
},
{
"message_diseaseid":"28",
"message_disease":"先天畸形"
},
{
"message_diseaseid":"29",
"message_disease":"其它"
}
]
]
}
}

下面是我构建的实体类

这是最里层的两个,
//疾病名称
public class JiBingdataname {

private String message_diseaseid;
private String message_disease;

//疾病类型
public class JiBingdata {

private String message_disease_type;

private String message_disease_typeid;


//外一层
public class JiBinglist {
private List mem_message_records;
private List mem_message_recordss;

//最外层

public class JiBingbean {

private String code;
private String message;
private JiBinglist data;

下面是我的解析代码

//解析JSON数据
private class Mythread extends Thread {
    @Override
    public void run() {
        System.out.println("....启动线程");

//网络请求路径
String path = HttpInfo.PATH + HttpInfo.GET_JIBINGLIST + HttpInfo.ID;
String jsonString = HttpUtils.getJsonContent(path);
Gson gson = new Gson();
System.out.println("------------------------" + path);
//解析json数据
jiBingbean = gson.fromJson(jsonString, JiBingbean.class);
System.out.println("....启动线程" + jiBingbean);
//解析成功后发送msg给UI主线程
Message msg = new Message();
msg.what = 101;
myHandler.sendMessage(msg);
}
}

    但是出现这样的问题
    java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 520 path $.data.mem_message_recordss[0]
    logcat日志错误指向这一行, jiBingbean = gson.fromJson(jsonString, JiBingbean.class);

    请教一下各位大神,是哪里处理的不好

3个回答

liyuanjinglyj
liyuanjinglyj   2016.02.23 10:28

用过Gson吗?其内部逻辑处理都跟你处理好了,你只要创建一个json实体类就好了。

daidaineteasy
daidaineteasy   Ds   Rxr 2016.02.23 10:44
     //外一层
    public class JiBinglist {
    private List mem_message_records;
    private List mem_message_recordss;
    }

指定泛型

     //外一层
    public class JiBinglist {
    private List<JiBingdata> mem_message_records;
    private List<JiBingdataname> mem_message_recordss;
    }

你解析的主要逻辑都是正确的,如果还有问题就是哪个小细节没有注意到,你再好好检查检查应该OK

daidaineteasy
daidaineteasy 回复密大林: 嗯嗯,客气啦
接近 2 年之前 回复
qq_33720124
qq_33720124 回复晓呆同学: 嗯。好的。我和服务器那边的人沟通。第一次做项目。也是第一次做解析接口。也是长知识了 。谢谢。麻烦了。
接近 2 年之前 回复
daidaineteasy
daidaineteasy 回复密大林: 嗯嗯呢,这种情况最好是跟服务器那边沟通一下,看看怎能么解决比较好,个人感觉还是让服务器那边解决一下。然后定一个严格的json结构,这样你这边好解析,否则容易出问题。
接近 2 年之前 回复
qq_33720124
qq_33720124 你提到我才发现,mem_message_recordss里面比mem_message_records多了不止一个中括弧。。。
接近 2 年之前 回复
qq_33720124
qq_33720124 回复晓呆同学: mem_message_recordss的数据是根据mem_message_records的分组而分组进行展示的。
接近 2 年之前 回复
qq_33720124
qq_33720124 回复晓呆同学: 我查看了一下JSON数据,好像是因为不同的疾病类型包含的,所以才导致 mem_message_recordss的数据里面多中括弧。
接近 2 年之前 回复
qq_33720124
qq_33720124 回复晓呆同学: 我查看了一下JSON数据,好像是因为不同的疾病类型包含的,所以才导致 mem_message_recordss的数据里面多中括弧。
接近 2 年之前 回复
qq_33720124
qq_33720124 回复qq_33720124: 我查看了一下JSON数据,好像是因为不同的疾病类型包含的,所以才导致 mem_message_recordss的数据里面多中括弧。
接近 2 年之前 回复
qq_33720124
qq_33720124 回复晓呆同学: 和服务器那边沟通一下让他们去掉?
接近 2 年之前 回复
daidaineteasy
daidaineteasy 回复密大林: 服务端返回的json有个地方错了,"mem_message_recordss": [ [ 这一层多了一层中括弧
接近 2 年之前 回复
qq_33720124
qq_33720124 回复晓呆同学: 嗯。是的,还是同样的错误。
接近 2 年之前 回复
daidaineteasy
daidaineteasy 回复密大林: 还是报同样的错误么
接近 2 年之前 回复
qq_33720124
qq_33720124 指定以后还是不行啊。
接近 2 年之前 回复
qq_33720124
qq_33720124 好的。谢谢
接近 2 年之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.02.23 14:22

你的List没有指定泛型

qq_33720124
qq_33720124 指定以后还是不行啊。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!