转发自:%401%2Csz%%2Cta%./=/w=0_10_/t=/l=3/tc?ref=&lid=&order=1&fm=alop&h5ad=1&srd=1&dict=32&tj=tle&=4&vit=osres&m= 8&cltj =&asres=1&title=JSON%E4%B8%8E%E5%AF%B9%E8%B1%A1%E9%9B%86%E5%90%88%E4%B9%8B%E9%97%B4% E7 %9A%84%E8%BD%AC%E6%8D%A2-自由-Dom-%E5%8D%9A%E5%AE%A2%E5%9B%AD&w_qd=&sec=24076&di=fb3c0&bdenc=1&tch=124.0 。 295.175.0.0&nsrc=&eqid=0&wd=&=%7B%%22%3A%%22%2C%%22%3A%%22%2C%22t%22%3A97%2C%22sig%22%3A%%22 %2C%%22%3A%22div-a-h3-em3%22%7D
在开发过程中,经常需要与其他系统交换数据。 数据交换的格式包括XML、JSON等。JSON作为一种轻量级的数据格式,比XML更加高效。 XML需要大量的标签,这无疑占用了网络空间。 流量,JSON在这方面做得很好。 我们先看一下JSON的格式。
JSON可以有两种格式,一种是对象格式,另一种是数组对象。
{"name":"JSON","":"北京市西城区","age":25}//JSON对象格式字符串
[{"name":"JSON","":"北京市西城区","age":25}]//数据对象格式
从上面两种格式我们可以看出,对象格式与数组对象格式唯一的区别就是在对象格式中添加了[]。 看具体的结构,我们可以看到两者都是以键值对的形式出现。 , 英文中用逗号 (,) 分隔。
这种格式在前端和后端传输数据时也很流行。 后端返回json格式的字符串。 前端使用js中的JSON.parse()方法将JSON字符串解析为json对象,然后进行遍历,供前端使用。
下面进入正题,介绍JAVA中JSON与java对象的相互转换。
为了实现JSON和Java对象的相互转换,需要使用第三方jar包。 这里使用的是json-lib jar包。 下载地址为:json-lib需要--1.8.0.jar、--3.2。 对 1.jar、-lang-2.5.jar、--1.1.1.jar 和 -1.0.6.jar 五个包的支持可以从 下载。 这里就不贴下载地址了。
json-lib提供了几个类来完成这个功能,例如。 从类名可以看出,转换应该是对象格式,并且转换应该是数组对象(即用[]形式)。
1、java普通对象与json字符串之间的转换
java对象--》》字符串
Java普通对象是指java中的java bean,即实体类,比如,
.学习.day3;
班级 {
//姓名
姓名;
//年龄
年龄;
//地址
;
() {
姓名;
无效(名称){
this.name = 名称;
() {
年龄;
无效(年龄){
this.age = 年龄;
() {
;
空白 ( ) {
这。 = ;
@
() {
” [姓名=“+姓名+”,年龄=“+年龄+”,=
+ + “]”;
上面是我的一个普通的java实体类。 我们来看看 json-lib 如何将其转换为字符串形式。
空白 () {
斯图=新();
斯图。(“JSON”);
斯图。(“23”);
Stu.(“北京市西城区”);
//1. 使用
json = .(stu);
//2. 使用
数组=.(stu);
=json.();
=数组.();
.out.(":"+);
.out.(":"+);
我定义了一个实体类,然后使用 和 两个方法将其转换为JSON字符串。 请参阅下面的打印结果:
:{"":"北京市西城区","age":"23","name":"JSON"}
:[{"":"北京市西城区","age":"23","name":"JSON"}]
从结果可以看出,两种方法都可以将java对象转换为JSON字符串,但是转换后的结构不同。
JSON字符串--》》java对象
上面解释了如何将java对象转换为JSON字符串。 我们来看看如何将 JSON 字符串格式转换为 java 对象。
首先,需要定义两种不同格式的字符串,并且需要使用\来转义双引号。
空白 (){
//定义两种不同格式的字符串
="{\"姓名\":\"JSON\",\"年龄\":\"24\",\"\":\"北京市西城区\"}";
="[{\"姓名\":\"JSON\",\"年龄\":\"24\",\"\":\"北京市西城区\"}]";
//1. 使用
=.();
Stu=().(, .class);
//2. 使用
=.();
//获取到的第一个元素
o=.get(0);
=.(o);
Stu2=().(, .class);
.out.("stu:"+stu);
.out.("stu2:"+stu2);
打印的结果是:
Stu:[姓名=JSON,年龄=24,=北京市西城区]
Stu2:[姓名=JSON,年龄=24,=北京市西城区]
从上面的代码可以看出,可以很方便的将一个JSON格式的字符串转为一个java对象,但是使用起来却不是那么好用,因为它有“[]”符号,所以这里我们得到了对象,取它的第一个里面就是我们需要的变形,然后使用就很容易搞定了。
2.list与json字符串之间的转换
列表--》》json字符串
空白 (){
斯图=新();
斯图。(“JSON”);
斯图。(“23”);
Stu.(“北京市海淀区”);
列表lists=new();
列表.add(stu);
//1. 使用
// =.(列表);
//2. 使用
=.(列表);
//.out.(":"+.());
.out.(":"+.());
使用方法我注释掉了。 在评论之前我们先看看结果。
在“main”net.sf.json.: '' 中是一个数组。 使用
告诉我有一个例外。 通过查看源码,发现使用方法时,会先判断参数类型。 这里告诉我们传入的参数是数组类型,因为使用了。 我们来看看评论后的结果吧。 ,
:[{"":"北京市海淀区","age":"23","name":"JSON"}]
这个结果是正常的。
json字符串--》》列表
从上面的例子我们可以看出,列表对象只能转换为数组对象的格式,那么我们看一下下面从字符串到列表的转换,
空白 (){
="[{\"姓名\":\"JSON\",\"年龄\":\"24\",\"\":\"北京市西城区\"}]";
//转换为列表
列表list2=(列表).(.(),.class);
对于(stu:列表2){
.out.(stu);
//转换为数组
[] ss =([]).(.(),.class);
对于(:ss){
。出去。();
打印结果,
[姓名=JSON,年龄=24,=北京市西城区]
[姓名=JSON,年龄=24,=北京市西城区]
由于字符串的格式是带有“[]”的格式,所以这里选择这个对象。 它有可供使用的方法。 前者在java中转换为数组,或者在java中转换为列表。 由于这里有实体类来对应,所以使用时指定泛型类型(.class),这样就可以得到转换后的对象。
3.map与json字符串的相互转换
地图--》》json字符串
空白 (){
斯图=新();
斯图。(“JSON”);
斯图。(“23”);
Stu.(“中国上海”);
地图map=new();
map.put("第一", Stu);
//1,
=.(地图);
.out.(""+.());
//2,
=.(地图);
.out.(":"+.());
打印结果,
{"first":{"":"中国上海","age":"23","name":"JSON"}}
:[{"first":{"":"中国上海","age":"23","name":"JSON"}}]
上面打印了两个表格。
json字符串--》》地图
JSON字符串不能直接转换为地图对象。 要获取map中key对应的value,还需要其他方法。
空白 (){
="{\"第一\":{\"\":\"中国上海\",\"年龄\":\"23\",\"姓名\":\"JSON\"}}";
//
=.();
地图map=new();
map.put("第一个", .class);
//该方法使用,需要三个参数
my=().(, .class, 地图);
.out.(我的.());
打印结果,
[姓名=JSON,年龄=23,=中国上海]
下面是代码,
.学习.day4;
java.util.Map;
.学习.day3.;
班级 {
第一的;
() {
第一的;
无效(第一){
this.first = 第一个;
使用()方法,传入三个参数,第一个是对象,第二个是.class,第三个是Map对象。 可以知道,这个类中一定有一个first属性,它的类型必须对应map中的key和value类型,即first对应key,first类型对应value类型。