Json字符串转Java对象, 分成几种情况
从目标对象的类型看:
从目标对象的类型看:
- 无Pojo类对应
Json.fromJson(source/*来源参数*/)
- 有Pojo类对应
Json.fromJson(Class
klass, source/*来源参数*/) Json.fromJson(Type t, source/*来源参数*/)
- Pojo集合或Map嵌套
Json.fromJsonAsArray(Class
klass, source/*来源参数*/) Json.fromJsonAsList(Class
klass, source/*来源参数*/) Json.fromJsonAsMap(Class
klass, source/*来源参数*/)
从来源看:
- 字符串
Json.fromJson(CharSequence c)
Json.fromJson(Class
klass, CharSequence c)
- Reader
Json.fromJson(Reader c)
Json.fromJson(Class
klass, Reader reader)
- File
Json.fromJsonFile(Class
klass, File f)
1、无pojo类对应
@Test public void jsonTest3(){ String jsonStr="{'name':'杜杰','age':28,'sex':'女'}"; Object obj=Json.fromJson(jsonStr); System.out.println(obj.toString()); //{name=杜杰, age=28, sex=女} }
2、有Pojo类对应(简单)
@Test public void jsonTest4(){ String jsonStr="{'id':20,'name':'周益涛','sal':10000.0,'age':18}"; Person person=Json.fromJson(Person.class,jsonStr); System.out.println(person.toString()); //Person [id=20, name=周益涛, age=18, sal=10000.0] }
@Test public void jsonTest4(){ //InputStream in=this.getClass().getResourceAsStream("person.json"); Person person=Json.fromJsonFile(Person.class,new File("person.json")); System.out.println(person.toString()); } //Person [id=2020, name=周益涛, age=18, sal=20000.0]
pet = Json.fromJson(Pet.class, reader);
有Pojo类对应(复杂自定义)
有Pojo类对应(复杂自定义)
fromJson方法中最复杂最灵活的方法群
String str = "[{dongdong:{age:80}}]";
List
Pojo集合或Map嵌套
这群方法事实上就是 有Pojo类对应(复杂自定义) 中的简写形式
String str = "{dongdong:{age:80}}";
Map, Pet> pets = Json.fromJsonAsMap(Pet.class, str/*其他源也可以*/); assertEquals(80, pets.get("dongdong").getAge());// Junit断言一下,肯定是80啦
一通百通,哈哈,仔细琢磨一下吧
复杂泛型
String str = "{abc:{def:{age:1}}}";
Map> map;
// 1.r.59及之前版本的做法
NutType t = NutType.mapStr(NutType.mapStr(Record.class));
map = (Map>) Json.fromJson(type, str);
// 1.r.60可以这样写. 通构建一个PType的匿名内部类实现
map = Json.fromJson(new PType>>(){}, str);
PType是NutType的子类,老版本可以直接拷贝其源码,实现类似的调用方法.