java json对象和json数组对象的处理

article/2025/9/26 19:57:59

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式,

JSON可以有两种格式,一种是对象格式的,另一种是数组对象,

{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串

 

[{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式


从上面的两种格式可以看出对象格式和数组对象格式唯一的不同则是在对象格式的基础上加上了[],再来看具体的结构,可以看出都是以键值对的形式出现的,中间以英文状态下的逗号(,)分隔。

在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。

下面进入正题,介绍在JAVA中JSON和java对象之间的互转。

要想实现JSON和java对象之间的互转,需要借助第三方jar包,这里使用json-lib这个jar包,下载地址为:https://sourceforge.net/projects/json-lib/,json-lib需要commons-beanutils-1.8.0.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar五个包的支持,可以自行从网上下载,这里不再贴出下载地址。

json-lib提供了几个类可以完成此功能,例,JSONObject、JSONArray。从类的名字上可以看出JSONObject转化的应该是对象格式的,而JSONArray转化的则应该是数组对象(即,带[]形式)的。

一、java普通对象和json字符串的互转

  java对象--》》字符串

java普通对象指的是java中的一个java bean,即一个实体类,如,

复制代码

package com.cn.study.day3;public class Student {//姓名private String name;//年龄private String age;//住址private String address;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", address="+ address + "]";}}

复制代码


 

上面是我的一个普通的java实体类,看json-lib如何把它转化为字符串形式,

复制代码

public static void convertObject() {Student stu=new Student();stu.setName("JSON");stu.setAge("23");stu.setAddress("北京市西城区");//1、使用JSONObjectJSONObject json = JSONObject.fromObject(stu);//2、使用JSONArrayJSONArray array=JSONArray.fromObject(stu);String strJson=json.toString();String strArray=array.toString();System.out.println("strJson:"+strJson);System.out.println("strArray:"+strArray);}

复制代码


 

我定义了一个Student的实体类,然后分别使用了JSONObject和JSONArray两种方式转化为JSON字符串,下面看打印的结果,

strJson:{"address":"北京市西城区","age":"23","name":"JSON"}
strArray:[{"address":"北京市西城区","age":"23","name":"JSON"}]

从结果中可以看出两种方法都可以把java对象转化为JSON字符串,只是转化后的结构不同。

  JSON字符串--》》java对象

上面说明了如何把java对象转化为JSON字符串,下面看如何把JSON字符串格式转化为java对象,

首先需要定义两种不同格式的字符串,需要使用\对双引号进行转义,

复制代码

public static void jsonStrToJava(){//定义两种不同格式的字符串String objectStr="{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城区\"}";String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城区\"}]";//1、使用JSONObjectJSONObject jsonObject=JSONObject.fromObject(objectStr);Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);//2、使用JSONArrayJSONArray jsonArray=JSONArray.fromObject(arrayStr);//获得jsonArray的第一个元素Object o=jsonArray.get(0);JSONObject jsonObject2=JSONObject.fromObject(o);Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);System.out.println("stu:"+stu);System.out.println("stu2:"+stu2);}

复制代码

打印结果为:

stu:Student [name=JSON, age=24, address=北京市西城区]
stu2:Student [name=JSON, age=24, address=北京市西城区]

从上面的代码中可以看出,使用JSONObject可以轻松的把JSON格式的字符串转化为java对象,但是使用JSONArray就没那么容易了,因为它有“[]”符号,所以我们这里在获得了JSONArray的对象之后,取其第一个元素即我们需要的一个student的变形,然后使用JSONObject轻松获得。

二、list和json字符串的互转

list--》》json字符串

 

复制代码

public static void listToJSON(){Student stu=new Student();stu.setName("JSON");stu.setAge("23");stu.setAddress("北京市海淀区");List<Student> lists=new ArrayList<Student>();lists.add(stu);//1、使用JSONObject//JSONObject listObject=JSONObject.fromObject(lists);//2、使用JSONArrayJSONArray listArray=JSONArray.fromObject(lists);//System.out.println("listObject:"+listObject.toString());System.out.println("listArray:"+listArray.toString());}

复制代码

我把使用JSONObject的方式给注掉了,我们先看注释之前的结果,

Exception in thread "main" net.sf.json.JSONException: 'object' is an array. Use JSONArray instead

告诉我说有一个异常,通过查看源码发现,在使用fromObject方法的时候会先进行参数类型的判断,这里就告诉我们,传入的参数是一个array类型,因为使用的ArrayList,再来看,注释之后的结果,

listArray:[{"address":"北京市海淀区","age":"23","name":"JSON"}]

这样结果是正常的。
json字符串--》》list

从上面的例子可以看出list的对象只能转化为数组对象的格式,那么我们看下面的字符串到list的转化,

复制代码

public static void jsonToList(){String arrayStr="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"北京市西城区\"}]";//转化为listList<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr), Student.class);for (Student stu : list2) {System.out.println(stu);}//转化为数组Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);for (Student student : ss) {System.out.println(student);}}

复制代码

打印结果,

Student [name=JSON, age=24, address=北京市西城区]
Student [name=JSON, age=24, address=北京市西城区]

由于字符串的格式为带有“[]”的格式,所以这里选择JSONArray这个对象,它有toArray、toList方法可供使用,前者转化为java中的数组,或者转化为java中的list,由于这里有实体类进行对应,所以在使用时指定了泛型的类型(Student.class),这样就可以得到转化后的对象。

三、map和json字符串的互转

map--》》json字符串

复制代码

public static void mapToJSON(){Student stu=new Student();stu.setName("JSON");stu.setAge("23");stu.setAddress("中国上海");Map<String,Student> map=new HashMap<String,Student>();map.put("first", stu);//1、JSONObjectJSONObject mapObject=JSONObject.fromObject(map);System.out.println("mapObject"+mapObject.toString());//2、JSONArrayJSONArray mapArray=JSONArray.fromObject(map);System.out.println("mapArray:"+mapArray.toString());}

复制代码

打印结果,

mapObject{"first":{"address":"中国上海","age":"23","name":"JSON"}}
mapArray:[{"first":{"address":"中国上海","age":"23","name":"JSON"}}]

上面打印了两种形式。

json字符串--》》map

JSON字符串不能直接转化为map对象,要想取得map中的键对应的值需要别的方式,

复制代码

public static void jsonToMap(){String strObject="{\"first\":{\"address\":\"中国上海\",\"age\":\"23\",\"name\":\"JSON\"}}";//JSONObjectJSONObject jsonObject=JSONObject.fromObject(strObject);Map map=new HashMap();map.put("first", Student.class);//使用了toBean方法,需要三个参数 MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map);System.out.println(my.getFirst());}

复制代码

打印结果,

Student [name=JSON, age=23, address=中国上海]

下面是MyBean的代码,

复制代码

package com.cn.study.day4;import java.util.Map;import com.cn.study.day3.Student;public class MyBean {private Student first;public Student getFirst() {return first;}public void setFirst(Student first) {this.first = first;}}

复制代码

使用toBean()方法是传入了三个参数,第一个是JSONObject对象,第二个是MyBean.class,第三个是一个Map对象。通过MyBean可以知道此类中要有一个first的属性,且其类型为Student,要和map中的键和值类型对应,即,first对应键 first类型对应值的类型。

关于复杂的JSON串转化为java对象的内容,在下篇中会继续说明。

本篇,主要说明了java中的bean、list、map和JSON的互转


http://chatgpt.dhexx.cn/article/uChESnKu.shtml

相关文章

数组转JSON json对象 json字符串

入参格式JSON对象与JSON字符串的区别 1、Object.assign() Object.assign() 方法将所有可枚举&#xff08;Object.propertyIsEnumerable() 返回 true&#xff09;的自有&#xff08;Object.hasOwnProperty() 返回 true&#xff09;属性从一个或多个源对象复制到目标对象&#…

js 数组转json,json转数组

//数组转json串 var arr [1,2,3, { a : 1 } ]; JSON.stringify( arr );//json字符串转数组 var jsonStr [1,2,3,{"a":1}]; JSON.parse( jsonStr );

Java利用fastjson解析复杂嵌套json字符串、json数组;json字符串转Java对象,json数组转list数组

文章目录 前言一、什么是JSON对象&#xff1f;二、什么是json字符串&#xff1f;二、什么是JSON数组&#xff1f;三、复杂、嵌套的json字符串四、json字符串转换4.1 简单json字符串转换为java对象4.2 简单json字符串数组转换为list数组4.3 复杂嵌套json字符串数组转换为Java对象…

将嵌套的json对象转化为json数组(python列表推导式)

需求说明 想将一个json文件录入MongoDB&#xff0c;如下图所示。 但是原文件是嵌套json对象的形式&#xff0c;如果直接导入MongoDB&#xff0c;会整体变成一个Document&#xff1a; 注&#xff1a;MongoDB中的Document相当于SQL中Row的概念。 而我希望一个Document对应一个…

Oracle 基础总结:日期函数专题

Oracle 基础总结&#xff1a;日期函数专题 日期函数:1、SYSDATE2、日期函数&#xff1a;(1&#xff09; MONTHS_BETWEEN&#xff08;日期1&#xff0c;日期2&#xff09;&#xff1a;返回两个日期相差的月数。(2&#xff09; ADD_MONTHS&#xff08;日期&#xff0c;数值&#…

numtodsinterval mysql用法_Oracle函数 - 日期函数详解

Oracle中的时间类型只有date和TIMESTAMP&#xff0c;TIMESTAMP是比date更精确的类型。日期时间函数用于处理时间类型的数据&#xff0c;Oracle以7位数字格式来存放日期数据&#xff0c;包括世纪、年、月、日、小时、分钟、秒&#xff0c;并且默认日期显式格式为“DD-MON-YY”。…

常用Oracle日期函数及聚合函数

1、常用Oracle日期函数 &#xff08;1&#xff09;CURRENT_DATE CURRENT_DATE是一个SQL标准函数&#xff0c;返回当前日期&#xff08;不带时间&#xff09;&#xff0c;可以在SELECT语句中使用。例如&#xff1a; 1 SELECT CURRENT_DATE FROM DUAL; 返回当前日期&#xff…

Oracle数据库之日期函数

今天给大家介绍一下oracle数据中的日期函数的用法。废话不多说&#xff0c;我们看一下oracle给我们提供了那些函数&#xff1f; 1.sysdate   用途&#xff1a;获取当前系统时间。 2.to_date(字符类型,日期类型) 用途&#xff1a;将字符类型转化成日期类型的函数&#xff0c;…

Oracle日期函数总结

1.日期和字符转换函数用法&#xff1a;&#xff08;to_char,to_date&#xff0c;to_namber&#xff09; 使用to_date函数将字符转换成数字。 使用to_char函数对日期的转换&#xff0c;并也可以对数字转换。 使用to_namber函数将字符转换成日期 格式&#xff1a;必须包含在单…

ORACLE之日期函数

日期函数&#xff1a; 运算规律&#xff1a; 日期数字 日期 日期-数字 日期 日期-日期 数字&#xff08;天数&#xff09; -- 查询当前日期&#xff1a; SELECT SYSDATE FROM DUAL;-- 查询一百天前的日期时间 SELECT (SYSDATE-100) FROM DUAL; -- 在指定日期上加上指定月数…

Oracle函数--日期函数

3.日期函数 months_between,add_months,next_day,last_day,round,trunc&#xff0c;sysdate sysdate关键字&#xff0c;表示系统的当前时间 select sysdate from dual; 结果&#xff1a;2022/5/4 12:38:4 select sysdate1 from dual; 当前时间加1天 结果&#xff1a;202…

Oracle 日期时间函数详解

文章目录 1 日期函数2 日期格式3 类型转换 1 日期函数 1. 常用日期函数(1) add_months(date, n) : n 个月前&#xff0c;-n 个月后(2) months_between(date1, date2) : 月份差 date1 - date22. 时区&#xff08;了解即可&#xff09;(1) select dbtimezone from dual;…

Oracle日期函数和转换函数

一、日期函数 日期函数用于处理date类型的数据&#xff0c;两个日期相减返回日期之间相差的天数。日期不允许做加法运算&#xff0c;无意义。 常见代表符号&#xff1a;yyyy 年&#xff0c;mm 月&#xff0c;dd 日&#xff0c;hh 小时&#xff0c;mi 分钟&#xff0c;ss 秒&…

Oracle 日期时间函数大全

前言 设置日期语言 alter session set NLS_DATE_LANGUAGEAMERICAN;alter session set NLS_DATE_LANGUAGESIMPLIFIED CHINESE; --也可以这样写&#xff1a;to_date(2021-06-30 15:23:45,yyyy-mm-dd hh24:mi:ss,NLS_DATE_LANGUAGEAMERICAN ) 可通过如下语句查看&#xff1a; se…

这12类Oracle日期函数,全都给你总结了

在使用Oracle数据库过程中&#xff0c;对日期的使用不可避免&#xff0c;那Oracle中的日期函数有哪些呢&#xff1f;本篇就日期函数进行整理了&#xff0c;不一定全部了解记住&#xff0c;但是要做到心中有数&#xff0c;以后在写脚本的时候就不会绕弯子了。 1、sysdate、curr…

Oracle日期函数

Oracle日期类型函数是操作日期、时间类型的相关数据&#xff0c;返回日期时间类型或数字类型结果&#xff0c;常用的函数有&#xff1a;SYSDATE()、ADD_MONTHS&#xff08;&#xff09;、LAST_DAY&#xff08;&#xff09;、TRUNC()、ROUND()等等。 系统日期、时间函数 SYSDAT…

Oracle函数——日期函数

Oracle中的时间类型只有date和TIMESTAMP&#xff0c;TIMESTAMP是比date更精确的类型。日期时间函数用于处理时间类型的数据&#xff0c;Oracle以7位数字格式来存放日期数据&#xff0c;包括世纪、年、月、日、小时、分钟、秒&#xff0c;并且默认日期显式格式为“DD-MON-YY”。…

回归问题的评价指标

回归问题的评价指标有很多&#xff0c;这里一一进行详细分类&#xff1a; 点对点误差 MSE均方误差 MSE(Mean Square Error)&#xff1a; 均方误差描述了样本真实值与预测值差方求和的平均值&#xff0c;在机器学习中&#xff0c;利用均方误差最小化优化模型的方法称…

区分回归问题和分类问题

回归问题和分类问题的区别 回归问题 用一个经典的问题来解释&#xff1a;假设你想买房子&#xff0c;手头上仅有的是之前出售的房子的占地面积大小和房子的价格&#xff0c;你想凭借手头上的这些数据来买一套不错的房子&#xff0c;那么你仅有的关于房子的信息是房子的占地大小…

LSTM回归问题

LSTM 解决回归问题时&#xff0c;出现了 model.predict() 输出的值几乎是常数值的问题&#xff0c;后来发现是因为数据没有标准化&#xff08;归一化&#xff09;&#xff0c;导致 loss 不下降&#xff0c;也就是不收敛。后来加入了数据的标准化之后&#xff0c;就可以拟合了。…