java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换。java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fastjson,谷歌的gson,本文只要对使用时间最长的json-lib和目前应用最为广泛的jackson这两种框架的使用进行说明。

  首先准备两个用于json格式字符串向JavaBean之间的相互转换的类。

public class User {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [age=" + age + ", name=" + name + "]";
} }
public class ListUser {

    private List<User> listUser;

    public List<User> getListUser() {
return listUser;
} public void setListUser(List<User> listUser) {
this.listUser = listUser;
} }

我们先来看json-lib的实现

public static void main(String[] args) throws Exception{
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
String jsonStr2 = "[{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
String jsonStr3 = "{\"listUser\": [{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";      //json-lib中json对象的构造器
     JSONObject jsonObject = JSONObject.fromObject(jsonStr1);
     //转换javaBean
     User user = (User)JSONObject.toBean(jsonObject, User.class);
     //json-lib中json数组的构造器
     JSONArray jsonArray = JSONArray.fromObject(jsonStr2);
     //json数组转换为list集合
     List<User> list = (List<User>)jsonArray.toCollection(jsonArray, User.class);      //对于"jsonStr3"这种数据格式的转换json的实现较为麻烦。
     //首先创建一个ListUser对象。
     ListUser lu = new ListUser();
     //json构造器
     JSONObject jsonObject1 = JSONObject.fromObject(jsonStr3);
     //获取json数组
     JSONArray jsonArray1 = (JSONArray)jsonObject1.get("listUser");
     //json数组转换为list集合
     List<User> list2 = (List<User>)jsonArray.toCollection(jsonArray1, User.class);
     lu.setListUser(list2);
     }

再来看一下jackson对这两种数据格式的转换。主要用到jackson的ObjectMapper这个类。

public static void main(String[] args) throws Exception{
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
String jsonStr2 = "[{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
String jsonStr3 = "{\"listUser\": [{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";
     
     ObjectMapper mapper = new ObjectMapper();
    
     User user = mapper.readValue(jsonStr1, User.class);
    
     List<User> userList = new ArrayList<User>();
    userList =(List<User>)mapper.readValue(jsonStr2, list.getClass());      ListUser readValue = mapper.readValue(jsonStr3, ListUser.class);
    

}

从以上两种框架的比较来看,相对于json-lib的转换来说jackson比较简单,而且从性能上来说jackson的转换速度也比较快。另外springmvc框架也包含了jackson框架,使我们在web工程中对于json的使用更加的方便。所以对于json数据格式的解析推荐是哪个jackson框架来做。

  最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson的更多相关文章

  1. 快速掌握Ajax-Ajax基础实例(Ajax返回Json在Java中的实现)

    (转)实例二:Ajax返回Json在Java中的实现 转自http://www.cnblogs.com/lsnproj/archive/2012/02/09/2341524.html#2995114 ...

  2. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  3. Java中final修饰的数据

    目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...

  4. 多线程(三) java中线程的简单使用

    java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...

  5. java中各种时间格式的转化

    http://www.chinaitpower.com/A/2005-01-14/104881.html 使用java.util.Calendar返回间隔天数         static int g ...

  6. java后台对json格式数据的解析

    Json 和 Jsonlib 的使用 什么是 Json JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式 ...

  7. JSON在Java中的使用(一)

    1.去JSON官网下载org.json包 https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22 ...

  8. Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)

    前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...

  9. 【Java/Json】Java对Json进行建模,分词,递归向下解析构建Json对象树

    伸手党的福音 代码下载:https://files.cnblogs.com/files/xiandedanteng/JsonLexerBuilder20191202.rar 互联网上成型的对Json进 ...

随机推荐

  1. 微信小程序基于腾讯云对象存储的图片上传

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...

  2. 设计模式——职责链模式(C++实现)

    #include <iostream> #include <string> using namespace std; class Handler { public: Handl ...

  3. 挂载U盘和移动硬盘

    1, 挂载U盘和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的.使用方法和移动硬盘完全一样.插入U盘之前[root at pldyrouter root]# fdisk - ...

  4. 100个命令Linux常用命令大全

    Linux常用命令大全100条: 1,echo "aa" > test.txt 和 echo "bb" >> test.txt//>将原 ...

  5. Ubuntu修改密码之后无法登录

    问题:Ubuntu修改密码之后无法登录,停留在登录界面,输入正确的密码之后,画面一闪又回到了登录界面. 解决:ctrl+alt_f1进入终端,输入用户名和密码,$cd /home/userXXX &a ...

  6. [总结] 第二类Stirling数

    上一道例题 我们来介绍第二类Stirling数 定义 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 .和第一类Stirling数不同的是,集合 ...

  7. Java并发系列[9]----ConcurrentHashMap源码分析

    我们知道哈希表是一种非常高效的数据结构,设计优良的哈希函数可以使其上的增删改查操作达到O(1)级别.Java为我们提供了一个现成的哈希结构,那就是HashMap类,在前面的文章中我曾经介绍过HashM ...

  8. linux --> 文件系统十问

    文件系统十问   参考:http://djt.qq.com/article/view/620   关于Linux文件系统相关的问题: 1.机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机 ...

  9. 实验楼 -- (Linux)

    1. 允许用户SSH登陆 # 打开ssh配置文件, 一般在/etc/ssh/sshd_config sudo vim /etc/ssh/sshd_config # 在文件最后添加: # 其中shiya ...

  10. Java多线程:ThreadLocal

    一.ThreadLocal基础知识 ThreadLocal是线程的一个本地化对象,或者说是局部变量.当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的 ...