java中的json的使用举例总结

一、背景

1.JSON在短时间内迅速风靡全球,原因有很多如WEB2.0的推动、JSON易用、高性能等等,互联网科技巨头也出了自家json,google有GSON阿里有fastjson,今天我主要讲下fastjson的编程开发案例。

二、优点

1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

2.JSON具体“自我描述性”(方便人阅读和编写。同时也易于机器解析和生成)

3.JSON采用完全独立于语言的文本格式

4.JavaScript和JSON无缝集成的

5.(应用场景丰富)Redis和MongoDB都采用json的格式存储,阿里、腾讯开放平台接口API都是json格式,json已经无处不在,程序员必备。

三、导入依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.47</version>
</dependency>

四、第一个例子(把对象转化成json串)

1.测试类

public class demo1 {
    public static void main(String[] args) {
        Student student = new Student(1, "张三");
        Student student1 = new Student(2, "李四");
        List<Student> list = Lists.newArrayList();
        list.add(student);
        list.add(student1);
        Teacher teacher = new Teacher("诺言", list);
        //实体类中的toString()
        System.out.println(student);
        //把对象转化成json串
        System.out.println(JSONObject.toJSONString(student));
        System.out.println(JSONObject.toJSONString(teacher));
    }
}

2.结果

Student{id=1, name='张三'}
{"id":1,"name":"张三"}
{"list":[{"id":1,"name":"张三"},{"id":2,"name":"李四"}],"name":"诺言"}

五、第二个例子(json串转化成对象)

1.测试类

public class demo1 {
    public static void main(String[] args) {
        String value="{\"list\":[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}],\"name\":\"诺言\"}";
        Teacher teacher = JSON.parseObject(StringUtils.trim(value), Teacher.class);
        System.out.println(teacher);
    }
}

2.结果

Teacher{name='诺言', list=[Student{id=1, name='张三'}, Student{id=2, name='李四'}]}

六、第三个例子(map集合转json串)

1.测试类

public class demo1 {
    public static void main(String[] args) {
        HashMap<String, Student> map = Maps.newHashMap();
        map.put("帅哥",new Student(1,"张三"));
        System.out.println(JSON.toJSONString(map));
    }
}

2.结果

{"帅哥":{"id":1,"name":"张三"}}

七、第四个例子(json串集合转map)

1.测试类

public class demo1 {
    public static void main(String[] args) {
        String value="{\"帅哥\":{\"id\":1,\"name\":\"张三\"}}";
        Map<String, Student> map = Maps.newHashMap();
        map = JSON.parseObject(value, Map.class);
        System.out.println(map.get("帅哥"));
    }
}

2.结果

{"name":"张三","id":1}

八、第五个例子( json集合转成集合对象)

1.测试类

public class demo1 {
    public static void main(String[] args) {
        String value="[{\"id\":2,\"name\":\"小红\"},{\"id\":1,\"name\":\"张三\"}]";
        List<Student> list = JSONArray.parseArray(value, Student.class);
        System.out.println(list);
    }
}

2.结果

[Student{id=2, name='小红'}, Student{id=1, name='张三'}]

九、第五个例子(高级的json注解和泛型用法

1.Student类

public class Student {
    @JSONField(name = "id")
    private Integer id;
    @JSONField(name = "name")
    private String name;
    //getter、setter方法
}

2.Teacher类

public class Teacher {
    private String name;
    private List<Student> list;
    //getter、setter
}

3.AbstractSchool<T>抽象类

public class AbstractSchool<T> {
    //抽象的学校人
    //人数量
    @JSONField(name = "num")
    private int num;
    @JSONField(name = "school_name")
    private String schoolName;;
    //业务数据,可以放老师、学生、食堂大妈
    @JSONField(name = "human")
    private List<T> human;
    //getter、setter
}

4.测试类

public class demo1 {
    public static void main(String[] args) {
        ArrayList<Student> students = Lists.newArrayList(new Student(1, "张三"), new Student(2, "李四"));
        AbstractSchool<Student> studentAbstractSchool = new AbstractSchool<>();
        studentAbstractSchool.setNum(students.size());
        studentAbstractSchool.setSchoolName("清华大学");
        studentAbstractSchool.setHuman(students);
        System.out.println(JSONObject.toJSONString(studentAbstractSchool));
    }
}

5.结果

{"human":[{"id":1,"name":"张三"},{"id":2,"name":"李四"}],"num":2,"school_name":"清华大学"}

6.总结

逻辑说明:

  • AbstractSchool就我抽象出来的学校的人,利用泛型来实现扩展。在实战项目中响应结果对象就可以设计成这样的AbstractResponse,特别是查询业务。
  • JSONField注解,看例子也明白是什么意思。

注意

  • 建议json值的类型就用字符和int等简单类型,用复杂类型序列化有风险。
  • 建议用官方最新maven版本,漏洞一直在修复。
  • json嵌套不要超过4层。
  • 设计表的大字段建议存json格式数据扩展性极好。

十、结束

Always keep the faith!!!

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值