随笔 - 832  文章 - 2  评论 - 31  阅读 - 167万

Nutz.Json转为Java对象(有Pojo类对应(复杂自定义以下内容还是看)

Json字符串转Java对象, 分成几种情况

从目标对象的类型看:

从目标对象的类型看:

  • 无Pojo类对应
    • Json.fromJson(source/*来源参数*/)
  • 有Pojo类对应
    • Json.fromJson(Class<T> klass, source/*来源参数*/)
    • Json.fromJson(Type t, source/*来源参数*/)
  • Pojo集合或Map嵌套
    • Json.fromJsonAsArray(Class<T> klass, source/*来源参数*/)
    • Json.fromJsonAsList(Class<T> klass, source/*来源参数*/)
    • Json.fromJsonAsMap(Class<T> klass, source/*来源参数*/)

从来源看

  • 字符串
    • Json.fromJson(CharSequence c)
    • Json.fromJson(Class<T> klass, CharSequence c)
  • Reader
    • Json.fromJson(Reader c)
    • Json.fromJson(Class<T> klass, Reader reader)
  • File
    • Json.fromJsonFile(Class<T> 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<Map<String, Pet>> list = (List<Map<String, Pet>>)Json.fromJson(NutType.list(NutType.mapStr(Pet.class)), str/*其他源也可以*/);

assertEquals(80, list.get(0).get("dongdong").getAge());// Junit断言一下,肯定是80啦

Pojo集合或Map嵌套

这群方法事实上就是 有Pojo类对应(复杂自定义) 中的简写形式

String str = "{dongdong:{age:80}}";
Map<String, Pet> pets = Json.fromJsonAsMap(Pet.class, str/*其他源也可以*/);

assertEquals(80, pets.get("dongdong").getAge());// Junit断言一下,肯定是80啦

一通百通,哈哈,仔细琢磨一下吧

复杂泛型

String str = "{abc:{def:{age:1}}}";
Map<String, Map<String, Record>> map;
// 1.r.59及之前版本的做法
NutType t = NutType.mapStr(NutType.mapStr(Record.class));
map = (Map<String, Map<String, Record>>) Json.fromJson(type, str);
// 1.r.60可以这样写. 通构建一个PType的匿名内部类实现
map = Json.fromJson(new PType<Map<String, Map<String, Record>>>(){}, str);

PType是NutType的子类,老版本可以直接拷贝其源码,实现类似的调用方法.

posted on   小破孩楼主  阅读(315)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2019-01-09 BigDecimal保留小数
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示