Java开发中json使用,各对象与json相互转换

时间:2022-05-09 22:19:07

Json:一种网络通信使用的数据格式,因为便于解析,比较流行,对象可以转为json,同样json也可以转对象。

下面介绍下Json工具的简单使用(fastjson && jackson)。

FastJson

  阿里的json数据解析工具包,国内比较流行,用的较多。

  对象转json字符串

    JSON.toJSONString(user);

  对象转json对象

    (JSONObject)JSON.toJSON(user);

  json字符串转对象

    JSON.parseObject(jsonString, User.class);  

  json对象转对象

    User javaObject = JSON.toJavaObject(jsonObject, User.class);

  list 转 json

    String jsonString = JSON.toJSONString(users);

  json 转 list

    List<User> parseArray = JSON.parseArray(jsonString, User.class);

  完整示例代码(需要引入fastjson的jar包):
package test;//JsonTest.java 文件所在位置:test包

import java.util.ArrayList;
import java.util.List; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; public class JsonTest {//User 类
static class User{
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer 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 static void main(String[] args) {
// new 一个User对象
User user = new User();
user.setAge(1);
user.setName("xiaojun"); //对象转json字符串
String jsonString = JSON.toJSONString(user);
System.out.println("对象转json字符串:\t" + jsonString);
//对象转json对象
user.setAge(2);
JSONObject jsonObject = (JSONObject)JSON.toJSON(user);
System.out.println("对象转json:\t" + jsonObject); //json字符串转对象
User parseObject = JSON.parseObject(jsonString, User.class);
System.out.println("json字符串转对象:\t" + parseObject); //json对象转对象
User javaObject = JSON.toJavaObject(jsonObject, User.class);
System.out.println("json对象转对象:\t" + javaObject); User user2 = new User();
user2.setAge(9);
user2.setName("xiaochen");
ArrayList<User> users = new ArrayList<>();
users.add(user2);
users.add(user);
System.out.println("list 转json============\t");
System.out.println("准备转json的list:\t" + users); //list 转json
String jsonString2 = JSON.toJSONString(users);
System.out.println("list转json:\t" + jsonString2); //json 转list
List<User> parseArray = JSON.parseArray(jsonString2, User.class);
System.out.println("json转list:\t" + parseArray);
} }

  

执行main方法Console控制台打印结果如下:

Java开发中json使用,各对象与json相互转换

Jackson

 与FastJson一样,Jackson 应该比fastjson 出现更早,api用法有些不一样,但是使用效果差不多

 使用jackson编写的json工具类,JsonUtil:

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper; /**
*
*/
public class JsonUtil { // 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper(); /**
* 将对象转换成json字符串。
* <p>Title: pojoToJson</p>
* <p>Description: </p>
* @param data
* @return
*/
public static String objectToJson(Object data) {
try {
String string = MAPPER.writeValueAsString(data);
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
} /**
* 将json结果集转化为对象
*
* @param jsonData json数据
* @param clazz 对象中的object类型
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 将json数据转换成pojo对象list
* <p>Title: jsonToList</p>
* <p>Description: </p>
* @param jsonData
* @param beanType
* @return
*/
public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
} return null;
} }

本文不定期更新

Java开发中json使用,各对象与json相互转换的更多相关文章

  1. Java开发中的几种对象的说明&lpar;PO&comma;VO&comma;DTO&comma;BO&comma;POJO&comma;DAO&comma;SAO等&rpar;

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...

  2. Java 开发中的对象拷贝

    前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...

  3. java开发中的常见类和对象-建议阅读时间3分钟

    1.Dao 数据访问对象 此对象用于访问数据库.实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类 ...

  4. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  5. Java开发中的23种设计模式详解&lpar;转&rpar;

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. java开发中的23中设计模式详解--大话设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. Java开发中的23种设计模式&lpar;转&rpar;

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  8. Java开发中文件读取方式总结

    JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...

  9. java开发中的23中设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  10. Java开发中常见的危险信号(上)

    本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...

随机推荐

  1. python3 -pip

    https://docs.python.org/3/installing/ ===== pip is the preferred installer program. Starting with Py ...

  2. 实现iOS图片等资源文件的热更新化&lpar;一&rpar;&colon; 从Images&period;xcassets导出合适的图片

    本文会基于一个已有的脚本工具自动导出所有的图片;最终给出的是一个从 Images.xcassets 到基于文件夹的精简 合适 的图片资源集的完整过程.难点在于从完整图片集到精简图片集,肯定是基于一个定 ...

  3. iOS大神牛人的博客集合

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...

  4. Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击

    Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...

  5. Caffe学习系列&lpar;8&rpar;:solver优化方法

    上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: &q ...

  6. LightOj1385 - Kingdom Division(数学几何题)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1385 题意:下图中已知面积 a b c 求 d; 如果d的面积不确定,输出-1. 连接 ...

  7. NET下RabbitMQ实践&lbrack;配置篇&rsqb;

    这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战.当然不排除加餐情况.  介绍: rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Publi ...

  8. 伪Base16的构思和实现

    最近看见了一个迅雷地址,发现将其转换为普通链接的工具后,发现所谓专用地址地址就是原地址前加一个表示迅雷的前缀,后进行Base64编码.查阅Base64编码过程后,突发奇想:能否做一个Base16算法? ...

  9. 结构-行为-样式-Css Div 居中的一个最佳实践

    最近在做项目的时候,经常会有需要各种居中的情况,现在分享一个最佳实践. <div class="success-bottom"> <div class=&quot ...

  10. TI公司与MSP430单片机

    美国德州仪器(Texas Instruments)公司,简称TI,是全球领先的半导体公司,成立于1930 年,成立之初是一家使用地震信号处理技术勘探原油的地质勘探公司,1951年更名为德州仪器公司,1 ...