java readvalue_详解 Jackson 中的 ObjectMapper 类中的 readValue 方法对泛型的处理

本文介绍了一种使用Java处理复杂JSON数据的方法,包括如何将Java对象转换为JSON字符串,以及如何从JSON字符串中读取并解析Java对象。文章通过三个测试案例详细展示了不同情况下的JSON数据处理技巧。

@Test

public void test(){

Json userJson = new Json<>();

Hit hit = new Hit<>();

hit.setId("1");

hit.setData(new User(20, "jack"));

Hits userHits = new Hits<>();

userHits.setFound(1);

userHits.setStart(2);

ArrayList> hitArrayList = new ArrayList<>();

hitArrayList.add(hit);

userHits.setHit(hitArrayList);

userJson.setHits(userHits);

try {

String userJsonString = JsonUtils.getMapper().writerWithDefaultPrettyPrinter().writeValueAsString(userJson);

System.out.println(String.format("hit to jsonString:\n%s", userJsonString));

Json readValue = JsonUtils.getMapper().readValue(userJsonString, new TypeReference>(){});

System.out.println(readValue.getHits().getFound());

userJsonString = JsonUtils.getMapper().writeValueAsString(readValue);

System.out.println(String.format("hit to jsonString:\n%s", userJsonString));

} catch (Exception e) {

e.printStackTrace();

}

}

@Test

public void test2(){

String jsonString = "{\"hits\":{\"found\":1,\"start\":2,\"hit\":[{\"id\":\"1\",\"data\":{\"age\":20,\"name\":\"jack\",\"enName\":null,\"password\":null,\"gender\":\"\\u0000\",\"hasMarried\":false}}]}}";

try {

// 通过 new TypeReference>(){} 来解决泛型问题

Json readValue = JsonUtils.getMapper().readValue(jsonString, new TypeReference>(){});

System.out.println(readValue.getHits().getFound());

// 通过 TypeFactory 来解决泛型问题

JavaType jsonType = JsonUtils.getMapper().getTypeFactory().constructParametricType(Json.class, User.class);

readValue = JsonUtils.getMapper().readValue(jsonString, jsonType);

System.out.println(readValue.getHits().getFound());

} catch (Exception e) {

e.printStackTrace();

}

}

@Test

public void test3(){

String jsonString = "{\"data\":{\"hits\":{\"found\":1,\"start\":2,\"hit\":[{\"id\":\"1\",\"data\":{\"age\":20,\"name\":\"jack\",\"enName\":null,\"password\":null,\"gender\":\"\\u0000\",\"hasMarried\":false}}]}},\"sign\":\"success\",\"code\":200,\"message\":null,\"dataSize\":1}";

try {

// 通过 new TypeReference>(){} 来解决泛型问题

HttpResponse> httpResponse = JsonUtils.getMapper().readValue(jsonString, new TypeReference>>(){});

System.out.println(httpResponse.getData().getHits().getFound());

// 通过 TypeFactory 来解决泛型问题

JavaType jsonType = JsonUtils.getMapper().getTypeFactory().constructParametricType(Json.class, User.class);

JavaType httpResponseJavaType = JsonUtils.getMapper().getTypeFactory().constructParametricType(HttpResponse.class, jsonType);

HttpResponse> parseHttpResponse = JsonUtils.getMapper().readValue(jsonString, httpResponseJavaType);

System.out.println(parseHttpResponse.getData().getHits().getFound());

} catch (Exception e) {

e.printStackTrace();

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值