在开发中,通常情况下,后台需要将所有的信息转成JSON格式返回到前端,同时,有时也要将前端传递的JSON格式的信息解析成对象进行处理,这就涉及到了JSON和对象之间的互相转换问题。
什么是JSON
JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。层次结构简洁、清晰,易于人阅读和编写,同时也易于机器解析和生成,而且可以有效地提升网络传输效率。
示例:
{
"people":[
{
"firstName": "Brett",
"lastName":"McLaughlin"
},
{
"firstName":"Jason",
"lastName":"Hunter"
}
]
}
JSON和JAVA对象之间的互转
在java中,主要依靠第三方库来实现快速高效的转换,最常用的有两个:一是阿里的fastjson;二是JSON-lib。
这里采用JSON-lib来实现。
首先,下载JSON-lib包,它支持beans,collections,maps,java arrays 和XML和JSON互相转换。
直接添加maven依赖即可
<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
切记,一定要在里面加上<classifier>标签,并指明jdk版本号。这里有个问题,当写其他版本号的时候,好像也会报错,查找很多资料并测试后发现,只有当写的版本号是 jdk15 时才会正常。报的错主要是在导入下面的包时,找不到对应的包,直接报红。加上这个标签后就没问题了。
import net.sf.json.JSONObject;
import net.sf.json.JSON;
导好包之后就可以使用了
其他对象转成JSON
1. List集合转换成json方法
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray2 = JSONArray.fromObject( list );
2. Map集合转换成json方法
Map map = new HashMap();
map.put("name", "json");
map.put("bool", Boolean.TRUE);
map.put("int", new Integer(1));
map.put("arr", new String[] { "a", "b" });
map.put("func", "function(i){ return this.arr[i]; }");
JSONObject json = JSONObject.fromObject(map);
3. Bean转换成json代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
4. 数组转换成json代码
boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
5. 一般数据转换成json代码
JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" )
6、beans转换成json代码
List list = new ArrayList();
JsonBean2 jb1 = new JsonBean2();
jb1.setCol(1);
jb1.setRow(1);
jb1.setValue("xx");
JsonBean2 jb2 = new JsonBean2();
jb2.setCol(2);
jb2.setRow(2);
jb2.setValue("");
list.add(jb1);
list.add(jb2);
JSONArray ja = JSONArray.fromObject(list);
其实,使用的都是一个方法 .fromObject()
JSON转成对象
String existImg = goods.getImg(); // 拿到一个JSON格式的字符串
JSONObject json = JSONObject.fromObject(existImg); // 先解析为JSON对象
List<String> imgsList = (List<String>) json.get("imgs"); // 再根据键在JSON里面取出值,并通过类型转换变为正常的对象。
这个前提是,我们应该要知道json中存储的是什么对象类型,否则可能就会解析出错。