繁体   English   中英

将json数组反序列化为Java对象保存列表

[英]deserialize a json array into a java object holding list

好的,所以我有点搞砸了。 我正在得到一个JSON数组,将对象看起来像这样: [{ "id": "1", "name": "some name", "url": "some url", "active": true }, { "id": "2", "name": "some other name", "url": "some other url", "active": true } ]"

现在,我希望能够将该数组反序列化为一个包含数组中对象列表的java对象。 我制作了一个自定义解串器,如下所示:

public class ListSerializer extends JsonDeserializer<List<Provider>>{

private static final long serialVersionUID = 9114152571639338391L;

@Override
public List<Provider> deserialize(JsonParser jsonParser, 
DeserializationContext arg1) throws IOException, JsonProcessingException {
// TODO Auto-generated method stub
final ObjectCodec objectCodec = jsonParser.getCodec();
final JsonNode listOrObjectNode = objectCodec.readTree(jsonParser);
final List<Provider> result = new ArrayList<Provider>();
for (JsonNode node : listOrObjectNode) {
  result.add(objectCodec.treeToValue(node, Provider.class));
}
  return result;
}



}

包含该列表的类如下所示:

public class ProviderList {

@JsonDeserialize(using = ListSerializer.class)
private List<Provider> providerList;

 public List<Provider> getProviderList() {
  return providerList;
}

public void setProviderList(final List<Provider> providerList) {
  this.providerList = providerList;
 }

}

现在,我知道这可能是一个愚蠢的做法,但总而言之,这只是需要的。 我显然做错了,因为我收到此错误:

无法在[来源:[{“ id”:“ 1”,“名称”:“ Posttrack”,“ url”:“ http:\\”的START_ARRAY令牌中反序列化com.wirelesscar.trailser.v1_0.domain.ProviderList实例。 dev.posttrack.com“,” active“:true},{” id“:” 2“,” name“:” Trackunit“,” url“:” http:\\ dev.trackunit.com“,” active“:真正}]; 行:1,列:1]

所以我的问题。 这可能吗? 我在哪里错了。

提前致谢!

您可以使用TypeReference包装器直接将其反序列化为列表。

@Data
public class Provider {
    private Long id;
    private String name;
    private String url;
    private boolean active;
}

@Data
public class ProviderList {
    List<Provider> providerList;
}

public class JsonTest {

    @Test
    public void  test() {
        String json = "[{\n" +
                "        \"id\": \"1\",\n" +
                "        \"name\": \"some name\",\n" +
                "        \"url\": \"some url\",\n" +
                "        \"active\": true\n" +
                "    }, {\n" +
                "        \"id\": \"2\",\n" +
                "        \"name\": \"some other name\",\n" +
                "        \"url\": \"some other url\",\n" +
                "        \"active\": true\n" +
                "    }\n" +
                "]";

        ObjectMapper mapper = new ObjectMapper();
        try {
            List<Provider> providerList = mapper.readValue(json, new TypeReference<List<Provider>>(){});
            for (Provider provider : providerList) {
                System.out.println(provider);
            }

            ProviderList list = new ProviderList();
            list.setProviderList(providerList);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM