JSONObject 与JSONArray
来源:互联网 发布:底部反转形态 知乎 编辑:程序博客网 时间:2024/06/06 13:01
JSON字符串可以有两种格式,一种是对象格式的JSONObject ,另一种是数组对象JSONArray
实例:
{“name”:”JSON”,”address”:”北京市西城区”,”age”:25}//JSON的对象格式的字符串
[{“name”:”JSON”,”address”:”北京市西城区”,”age”:25}]//数据对象格式
都是以键值对的形式存在,唯一的区别是数组多了一个[];
js中
JSON.parse() 用于将一个 JSON 字符串转换为 JavaScript 对象。
JSON.stringify() 用于将 JavaScript 值转换为 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五个包的支持,可以自行从网上下载。
1.java普通对象与json字符串的转换
java对象→字符串
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);}
打印的结果,
strJson:{“address”:”北京市西城区”,”age”:”23”,”name”:”JSON”} strArray:[{“address”:”北京市西城区”,”age”:”23”,”name”:”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轻松获得。
2.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),这样就可以得到转化后的对象。
3、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类型对应值的类型。
参考:https://www.w3cschool.cn/wqf_java/wqf_java-1p4t2epf.html
- jsonObject 与 jsonArray
- JsonObject 与JsonArray
- JSONObject与JSONArray
- JSONObject与JSONArray
- JSONObject与JSONArray
- JSONObject 与JSONArray
- jsonArray 与jsonObject 与bean
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用方法
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用
- JSONObject与JSONArray的使用方法 .
- 关于C#的 error CS0123: No overload for 'PaintHandler1' matches delegate 'System.Windows.Forms.PaintEven
- 普及练习场 字符串处理 斯诺登的密码
- Android EventBus
- struts2面试题
- 开发中常用Content-Type
- JSONObject 与JSONArray
- 创建邻接矩阵和邻接链表
- 欢迎使用CSDN-markdown编辑器
- 数据库事务的基本概念
- powerdesigner使用之——从“概念模型”到“物理模型”
- Python自学|Windows 下安装beautiful soup 4-4.4.1
- python内置字符串处理变量整理
- Eclipse 和 MyEclipse控制台不自动弹出解决办法
- 四边形分割平面