首页 > 解决方案 > 如何将json字符串反序列化为数组

问题描述

我有以下 JSON。

{
"code": 200,
"status": "success",
"request": [],
"total": 10,
"count": 10,
"offset": 0,
"limit": 100,
"response": [
    {
        "uid": "doc-1",
        "name": "Иванов Иван Иванович",
        "spec": [
            "Врач лабораторной диагностики",
            "Врач-терапевт"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/01.jpg"
    },
    {
        "uid": "doc-10",
        "name": "Попов Евгений Олегович",
        "spec": [
            "Врач ренгенолог"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/10.jpg"
    },
    {
        "uid": "doc-2",
        "name": "Петров Сергей Иванович",
        "spec": [
            "Врач лабораторной диагностики",
            "Врач диетолог",
            "врач-терапевт"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/02.jpg"
    },
    {
        "uid": "doc-3",
        "name": "Сидоров Сергей Константинович",
        "spec": [
            "Врач лабораторной диагностики",
            "Врач - ренгенолог"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/03.jpg"
    },
    {
        "uid": "doc-4",
        "name": "Константинов Александр Константинович",
        "spec": [
            "Врач лабораторной диагностики",
            "Врач-терапевт"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/04.jpg"
    },
    {
        "uid": "doc-5",
        "name": "Сергеев Иван Константинович",
        "spec": "Врач лабораторной диагностики",
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/05.jpg"
    },
    {
        "uid": "doc-6",
        "name": "Попов Дмитрий Данилович",
        "spec": [
            "Врач лабораторной диагностики",
            "Врач ренгенолог"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/06.jpg"
    },
    {
        "uid": "doc-7",
        "name": "Иванова Екатерина Павловна",
        "spec": [
            "Врач терапевт"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/07.jpg"
    },
    {
        "uid": "doc-8",
        "name": "Екатеринина Лада Павловна",
        "spec": [
            "Врач терапевт"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/08.jpg"
    },
    {
        "uid": "doc-9",
        "name": "Васильева Екатерина Олеговна",
        "spec": [
            "Врач терапевт"
        ],
        "photo": "http://demo-api.atlas-patiente.office.prosvdigital.ru/img/doctor/09.jpg"
    }
  ]
}

如您所见,所有spec字段都是一个数组,除了一个 - doc-5。我得到了改造中的数据。这是我POJO的回应。

public class Doctor implements IDObject<String>, Serializable {

public static final String FIELD_NAME = "name";

@SerializedName("uid")
private String id;
@SerializedName("name")
private String name;
@SerializedName("doctorShortName")
private String shortName;
@SerializedName("spec")
private List<String> speciality;
@SerializedName("photo")
private String photoUrl;

public String getName() {
    return name;
}

public String getPhotoUrl() {
    return photoUrl;
}

public List<String> getSpeciality() {
    return speciality;
}

public String getShortName() {
    return shortName;
}

@Override
public String getId() {
    return id;
}

@Override
public int hashCode() {
    return getId().hashCode();
}

@Override
public boolean equals(Object obj) {
    return obj instanceof Doctor && ((Doctor) obj).getId().equals(getId());
}
}

每次我尝试解析这个=错误。但是,如果我在String =中创建spec字段,一切都很好!doc-5

但是我不知道答案服务器可以发送给我什么,因为医生可以只有一个专业(在这种情况下spec是一个字符串),或者他可以有两个或更多(在这种情况下spec是一个数组)。

以及如何创建在这两种情况下都可以使用的多用途反序列化器?

标签: androidjsonpojojson-deserialization

解决方案


当您有specasi 单个字符串和 List/Array 从服务器到达时,应用程序是否崩溃或字符串是否包含该 List/Array 的 json?如果是这样,那么使用 Gson 或您正在使用的任何框架解析它应该相对简单。

将其添加为评论,但还没有足够的代表,对不起。


推荐阅读