fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化
fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化
在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串与JSON对象互相转换,自己在这一方面的概念总是很混乱,最近看源码和博客,在此记录一下。注意:全程用的是fastjson
首先JSON有两种格式,一种是对象格式,一种是对象数组。
在JSON使用中主要的3个类:JSON,JSONObjec,JSONArray
其中JSONObjec和JSONArray继承于JSON的。
JSON对象(JSONObject)
{"id":1,"name":"chen"}
JSON对象数组(JSONArray)
[
{"id":1,"name":"chen"},
{"id":2,"name":"张三"}
]
下面直接进入正题:
Java Bean 和JSON字符串的互转
Java Bean 转 JSON字符串
Java Bean是指Java中的一个普通对象(实体类)例如:
public class Student{
private String name; // 姓名
private Integer age; // 年龄
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(Integer age){
this.age = age;
}
public Integer getAge(){
return age;
}
@Override
public String toString() {
return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
使用JSON类的toJSONString()方法,实现JSON对象转化为JSON字符串和Java Bean对象转化为JSON字符串。仔细观察源码发现,该方法经过多次重载,但最终都是实现JSON对象转化为JSON字符串和Java Bean对象转化为JSON字符串。
@Test
public void BeanToJSONTest(){
Student student = new Student();
student.setName("小明");
student.setAge(20);
String s1 = JSON.toJSONString(student);
String s2 = JSONObject.toJSONString(student);
String s3 = JSONArray.toJSOnString(student);
System.out.println("s1: " + s1);
System.out.println("s2: " + s2);
System.out.println("s3: " + s3);
}
// 输出
s1: {"age":20,"name":"小明"}
s2: {"age":20,"name":"小明"}
s3: {"age":20,"name":"小明"}
JSON.toJSONString()、JSONObject.toJSONString和JSONArray.toJSOnString,上面说到JSONObject和JSONArray是继承JSON的,看JSONObject和JSONArray的源码并没有重写父类的toJSONString()的方法,而是直接使用父类的toJSONString方法,之前一直弄不明白,看了源码才知道。
JSON字符串 转 Java Bean
使用JSON类的parseObject()方法,实现JSON字符串转换为JSON对象或Java Bean对象。
@Test
public void JOSNToBeanTest(){
String strJson = "{\"age\":20,\"name\":\"小明\"}";
JSONObject jsonObject = JSON.parseObject(strJson);
System.out.println("jsonObject: " + jsonObject);
Student student = JSON.parseObject(strJson,Student.class);
System.out.println("student: " + student);
}
// 输出
jsonObject: {"name":"小明","age":20}
student: Student{name='小明', age=20}
该方法返回JSONObject对象,用于实现JSON字符串向JSON对象的转化,其内部调用了parse()方法,调用底层的DefaultJSONParser解析类进行转化,在转化失败时,抛出can not cast to JSONObject异常。
该方法不仅能实现JSON字符串向JSON对象的转化,经过重载之后,还能实现JSON字符串向Java Bean对象的转化
fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化的更多相关文章
- 处理 JSON null 和空数组及对象
描述了对 JSON 数据中使用的 null 和空数组及对象的处理. JSON 数据具有 null 和空数组及对象的概念.此部分说明其中每个概念如何映射到 null 和未设置的数据对象概念. Null ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- FastJson解析Json,封装JavaBean对象
获取到前端的Json,后台对应封装JavaBean对象,对其解析赋值 获取到前端的json,对其进行分析 1.获取最外层前端json对应得JavaBean (1)未分析格式的json串 (2)初步格式 ...
- fastJson javaBean和JSON对象相互转换
fastjson的作用就是把java 对象转化为字符串,把字符串转化为java对象,然后方便进行后续的逻辑处理. java对象和json互相转换都是通过JSON对象操作的: JavaBean bean ...
- 将一个 JavaBean 对象转化为一个 Map
package com.loan.modules.common.util; import java.beans.BeanInfo; import java.beans.IntrospectionExc ...
- JS中将对象转化为数组
前言 其实这本来应该是一个很基础的问题了,但我之做一想记录一下是因为之前因为对象转数组的时候卡住了后来弄了出来,但最近再遇到这个问题时竟然又卡主了,所以,关于这个问题,如何把一个对象{'未完成':5, ...
- Java对象与JSON互相转换jsonlib以及手动创建JSON对象与数组——(二)
首先声明一下,jsonlib转换与GSON相比太差劲了,操作不是一般的繁琐.GSON可以直接转换成各种集合与对象类型.强烈推荐使用GSON.而且GSON一个方法就可以解决,jsonlib转来转去太繁琐 ...
- PHP JSON数组与对象的理解
在PHP后端和客户端数据交互的过程中,JSON数据中有时格式不定,一会儿是数组,一会儿是对象,弄得客户端开发人员要崩溃的感觉. 因此,前后端相关人员先对PHP的json_encode函数原理有必要的了 ...
- js中js数组、对象与json之间的转换
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ &quo ...
随机推荐
- Idea项目上传到gitlab(以新建项目为例)
1.首先,需要你自己登录GitLab,并新建一个项目的链接,如下图所示: 图一: 图二: 图三(idea上传时用到此链接): 2.在idea上新建一个demo项目,创建一个Git仓库: 3.点击创建后 ...
- 微信小程序在ios系统不兼容new Date('yyyy-mm-dd')
微信小程序中使用new Date('2021-04-01 10:11:20')来转换时间在苹果手机不生效 兼容写法为new Date('2021/04/01 10:11:20')
- Elasticserch与Elasticsearch_dsl用法
Elasticserch与Elasticsearch_dsl用法 Elasticsearch_dsl::https://elasticsearch-dsl.readthedocs.io/en/late ...
- Docker学习(1) 初识
Docker的使用场景 1 使用Docker容器开发,测试,部署服务 2 创建隔离的运行环境 3 搭建测试环境 4 构建多用户的平台及服务(PaaS)基础设施 5 提供软件即服务(SaaS)应用程序 ...
- Deformable 可变形的DETR
Deformable 可变形的DETR This repository is an official implementation of the paper Deformable DETR: Defo ...
- 4D雷达成像技术
4D雷达成像技术 当我们谈及3D捕捉时,总是先想到光学传感器.当我们讨论在第四维度(时间)讨论视觉数据时,倾向于考虑场景数据调度.这些是我们多年来关注激光雷达(LiDAR)和摄影测量,以及用户针对缓慢 ...
- AI框架精要:设计思想
AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...
- CodeGen标记循环
CodeGen标记循环 标记循环是一个模板文件构造,它允许您迭代CodeGen拥有的标记信息的集合.为了使用标记循环,必须基于至少定义了一个字段标记的存储库结构生成代码. 标 ...
- linux文件内容列传行_行转列
================ 文件内容列传行_行转列 ================ 一.列转行 1.编辑测试文件 vi log.txt 16:23:00 8.2% 1773620k 16:2 ...