今天要向大家介绍的是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),到这里就给大家介绍完了,希望能帮助到大家。有不足之处还望见谅,有自己见解的朋友还可以在下方评论处写出自己的见解,大家一起交流哦!
注:文章来源:博客园 作者:迷茫中守候
1.文章《“如何将json对象转换为实体对象“json字符串转换为实体对象!》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《“如何将json对象转换为实体对象“json字符串转换为实体对象!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好