zoukankan      html  css  js  c++  java
  • 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的子类,老版本可以直接拷贝其源码,实现类似的调用方法.

  • 相关阅读:
    python hmac解密
    pymongo加索引以及查看索引例子
    语音-数字中继-E1-学习帖
    Partition does not start on physical sector boundary
    吃自助餐怎么样一个顺序吃法才合算?
    关于ROS证书导入的步骤
    MikroTik-ROS-无线设备传输距离
    这个移动通讯中 DB 、DBm 、瓦的基本知识的问题:
    涨姿势 | 无线通讯距离现场评估知多少?
    linux下生成https的crt和key证书
  • 原文地址:https://www.cnblogs.com/zouhong/p/12171752.html
Copyright © 2011-2022 走看看