今天要向大家介绍的是Java学习的JSON字符串和JAVA目标的相互转换(json-lib)。需要的朋友可以先编码后再看!

在开发过程中,经常需要与其他系统交换数据。数据交换的格式有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-lib提供了几个类可以完成此功能,例,JSONObject、JSONArray。从类的名字上可以看出JSONObject转化的应该是对象格式的,而JSONArray转化的则应该是数组对象(即,带[]形式)的。

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

java对象–》》字符串

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

package com.cn.;

public class Student {

//姓名

private String name;

//年龄

private String age;

//住址

private String address;

public String getName() {

return name;

}

public void setName(String name) {

= name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

= age;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

= address;

}

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + ", address="

+ address + "]";

}

}

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

public static void convertObject() {

Student stu=new Student();

("JSON");

("23");

("上海漕河泾");

//1、使用JSONObject

JSONObject json = JSONObject.fromObject(stu);

//2、使用JSONArray

JSONArray array=JSONArray.fromObject(stu);

String strJson=j();

String strArray=array.toString();

Sy("strJson:"+strJson);

Sy("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、使用JSONObject

JSONObject jsonObject=JSONObject.fromObject(objectStr);

Student stu=(Studen(jsonObject, S);

//2、使用JSONArray

JSONArray jsonArray=JSONArray.fromObject(arrayStr);

//获得jsonArray的第一个元素

Object o=j(0);

JSONObject jsonObject2=JSONObject.fromObject(o);

Student stu2=(Studen(jsonObject2, S);

Sy("stu:"+stu);

Sy("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();

("JSON");

("23");

("上海漕河泾");

List<Student> lists=new ArrayList<Student>();

li(stu);

//1、使用JSONObject

//JSONObject listObject=JSONObject.fromObject(lists);

//2、使用JSONArray

JSONArray listArray=JSONArray.fromObject(lists);

//Sy("listObject:"+li());

Sy("listArray:"+li());

}

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

Exception in thread "main" net.: '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":"上海漕河泾"}]";

//转化为list

List<Student> list2=(List<Student>(arrayStr), S);

for (Student stu : list2) {

Sy(stu);

}

//转化为数组

Student[] ss =(Student[](arrayStr),S);

for (Student student : ss) {

Sy(student);

}

}

打印结果,

Student [name=JSON, age=24, address=上海漕河泾]

Student [name=JSON, age=24, address=上海漕河泾]

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

三、map和json字符串的互转

map–》》json字符串

public static void mapToJSON(){

Student stu=new Student();

("JSON");

("23");

("中国上海");

Map<String,Student> map=new HashMap<String,Student>();

map.put("first", stu);

//1、JSONObject

JSONObject mapObject=JSONObject.fromObject(map);

Sy("mapObject"+ma());

//2、JSONArray

JSONArray mapArray=JSONArray.fromObject(map);

Sy("mapArray:"+ma());

}

打印结果,

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"}}";

//JSONObject

JSONObject jsonObject=JSONObject.fromObject(strObject);

Map map=new HashMap();

map.put("first", S);

//使用了toBean方法,需要三个参数

MyBean my=(MyBean(jsonObject, MyBean.class, map);

Sy());

}

打印结果,

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

下面是MyBean的代码,

package com.cn.;

import java.u;

import com.cn..Student;

public class MyBean {

private Student first;

public Student getFirst() {

return first;

}

public void setFirst(Student first) {

= first;

}

}

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

JSON字符串和java对象的互转(json-lib),到这里就给大家介绍完了,希望能帮助到大家。有不足之处还望见谅,有自己见解的朋友还可以在下方评论处写出自己的见解,大家一起交流哦!

注:文章来源:博客园 作者:迷茫中守候

相关推荐