取得远端相应Json并转化为Java对象(嵌套对象)二
工程下载链接:https://files.cnblogs.com/files/xiandedanteng/JsonParse20190929.rar
客户端:
如果从Restful Service取得的Json文是嵌套的,那转化的对象也会嵌套,用net.sf.json.JSONObject依然可以解析,但是得说明子对象的类型。
比如远端的响应是{"name":"大明","emps":[{"id":1,"name":"傅宗龙"},{"id":2,"name":"孙传庭"},{"id":5,"name":"卢象升"}]}
这里存在对象嵌套,需要在转化前指定里面的{"id":1,"name":"傅宗龙"}是什么类型的。
具体代码如下:
// 从远端取得相应
RestTemplate rt=new RestTemplate();
String result = rt.getForObject("http://localhost:8080/company",String.class);
System.out.println(result);
// 将Json字符串转嵌套Java对象
Map<String,Class> classMap = new HashMap<String,Class>();
classMap.put("emps", Emp.class);//这句话是告诉JSON解析器Company类的emps中元素是什么类型的,如果不指明,emps中会是恼人的MorphDynaBean类型的。
JSONObject jsonObject=JSONObject.fromObject(result);
Company stu=(Company)JSONObject.toBean(jsonObject, Company.class,classMap);
System.out.println(stu);
输出是这样:
{"name":"大明","emps":[{"id":1,"name":"傅宗龙"},{"id":2,"name":"孙传庭"},{"id":5,"name":"卢象升"}]}
公司名=大明 雇员名:傅宗龙 雇员名:孙传庭 雇员名:卢象升
第二条说明Json文字到对象的转化是成功的。
而Emp的代码是:
package com.testEmp;
public class Emp {
private long id;
private String name;
public Emp() {
}
public Emp(long id,String name) {
this.id=id;
this.name=name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Company的代码是:
package com.testEmp;
import java.util.ArrayList;
import java.util.List;
public class Company {
private String name;// 雇员列表
private List<Emp> emps;// 公司名称
// 因为反射生成实例的缘故,这个空构造函数是必须的
public Company() {
}
public Company(String name) {
this.name=name;
emps=new ArrayList<Emp>();
}
// 这种写法能做到连加
public Company add(Emp newEmployee){
emps.add(newEmployee);
return this;
}
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("公司名="+this.name);
for(Emp e:emps) {
sb.append(" 雇员名:"+e.getName());
}
return sb.toString();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Emp> getEmps() {
return emps;
}
public void setEmps(List<Emp> emps) {
this.emps = emps;
}
}
服务端:
控制器:
package com.example.demo;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Ctrl {
。。。
@RequestMapping("/company")
public Company getCompany() {
Company c=new Company("大明");
c.add(new Emp(1,"傅宗龙")).add(new Emp(2,"孙传庭")).add(new Emp(5,"卢象升"));
return c;
}
}
Company类:
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
public class Company {
private String name;// 雇员列表
private List<Emp> emps;// 公司名称
public Company(String name) {
this.name=name;
emps=new ArrayList<Emp>();
}
// 这种写法能做到连加
public Company add(Emp newEmployee){
emps.add(newEmployee);
return this;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Emp> getEmps() {
return emps;
}
public void setEmps(List<Emp> emps) {
this.emps = emps;
}
}
Emp类:
package com.example.demo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Emp {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column
private String name;
public Emp() {
}
public Emp(long id,String name) {
this.id=id;
this.name=name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
参考资料:https://blog.csdn.net/fenfenguai/article/details/78614788
--END-- 2019年9月29日14:31:43
取得远端相应Json并转化为Java对象(嵌套对象)二的更多相关文章
- 取得远端相应Json并转化为Java对象一
JDK:1.8.0_212 IDE:STS4(Spring Tool Suit4 Version: 4.3.2.RELEASE) 工程下载:https://files.cnblogs.com/file ...
- 将JSON字符串反序列化为指定的.NET对象类型
目录导航: 前言: 方法一.在项目中定义对应的对象参数模型,用于映射反序列化出来的参数(复杂JSON字符串数据推荐使用): 方法二.直接将JSON字符串格式数据反序列化转化为字典数据(简单JSON字符 ...
- fastjson将json字符串转化为java对象
目录 一.导入一个fastjson的jar包 二.Json字符串格式 三.根据json的格式创建Java类 四.给java类的所有属性添加setter方法 五.转换为java对象 一.导入一个fast ...
- Js把Json序列化为Java接受的对象。
服务器端 Java定义 data class role(var name: String = "", var remark: String = "") data ...
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...
- 做一次面向对象的体操:将JSON字符串转换为嵌套对象的一种方法
背景与问题 在 <一个略复杂的数据映射聚合例子及代码重构> 一文中,将一个JSON字符串转成了所需要的订单信息Map.尽管做了代码重构和配置化,过程式的代码仍然显得晦涩难懂,并且客户端使用 ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
- C# Json数据反序列化为Dictionary并根据关键字获取指定值1
Json数据: { "dataSet": { "header": { "returnCode": "0", " ...
- C# Json数据反序列化为Dictionary并根据关键字获取指定值
Json数据: { "dataSet": { "header": { "returnCode": "0", " ...
随机推荐
- java9 新特征
Java 平台级模块系统 java模块化解决的问题:减少Java应用和Java核心运行时环境的大小与复杂性 模块化的 JAR 文件都包含一个额外的模块描述器.在这个模块描述器中, 对其它模块的依赖是通 ...
- CentOS7安装node环境
1 找到官网复制链接地址 2 再自己Linux的按照路径,wget下载软件包并解压 wget https://nodejs.org/dist/v10.16.1/node-v10.16.1-linux- ...
- 编译TensorFlow-serving GPU版本
编译TensorFlow-serving GPU版本 TensorFlow Serving 介绍 编译GPU版本 下载源码 git clone https://github.com/tensorflo ...
- 【ARC072 E】Alice in linear land
被智商题劝退,告辞 题意 有一个人在一条数轴的距离原点为 \(D\) 的位置,他可以执行 \(n\) 次操作,每次操作为给定一个整数 \(d_i\),这个人向原点的方向走 \(d_i\) 个单位,但如 ...
- std::map 的swap错用
map<int, shared_ptr<int>>map_test; shared_ptr<); map_test[] = tmp_1; shared_ptr<); ...
- nodejs研发环境
https://blog.csdn.net/angl129/article/details/90696251
- 第八章 watch监听 84 watch-监视路由地址的改变
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 第七章 路由 77 路由-使用children属性实现路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 由函数$y=\sin x$的图像伸缩变换为函数$y=\sin(\omega x)$的图像(交互式)
可以拖动滑动条\(\omega\)显示动态效果
- jquery实现静态页面include
最近在写一套前端页面,发现每个页面都复制一遍公共头.尾,十分不方便.于是就想能否也像PHP模板引擎一样,使用include引入公共文件,这便是接下来这段代码的意义.我们先来总结一下需求: 1.可以像使 ...