java复杂对象转json_java中json数据⽣成和解析(复杂对象演
⽰)
1.json简单介绍
1.1 json是最流⾏和⼴泛通⽤的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使⽤.
1.2 举个例⼦,下⾯是⼀个json对象,名字叫王,他有两个粉丝组成数组,⼀个叫⼩王,⼀个叫⼩:
{
"name":"王",
"fans":[{
"name":"⼩王",
"age":"7"
},{
"name":"⼩",
"age":"10"
}]
}
2.json数据⽣成和解析
2.1 关于json处理的包有好⼏类,开源jackson,⾕歌Gson,阿⾥巴巴的Fastjson.Gson功能强⼤,但是Fastjson性能更快.如何选择见仁见智就⾏
2.2 这⾥我开始都是⽤org.json,后⾯为了演⽰复杂json转java bean⼜导⼊了功能强⼤的Gjson,先附上两个maven依赖:
org.json
json
20160810
gson
2.7
2.3 json数据的⽣成,也就是各种类型转json.(String,map和java bean)
DemoCreateJson.java
importorg.json.JSONObject;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/*** Created by garfield on 2016/10/16.
* 举三种创建json的例⼦*/
public classDemoCreateJson {public static voidmain(String[] args) {
StringCreateJson();
mapCreateJson();
beanCreateJson();
}//String创建json
/*** {
"name":"王",
"fans":[{
"name":"⼩王",
"age":"7"
},{
"name":"⼩",
"age":"10"
}]
}*/
static voidStringCreateJson(){
JSONObject jsonObject= newJSONObject();
jsonObject.put("name","王");//粉丝是个数组,其实就是嵌套json JSONObject jsonObject1 = newJSONObject();
jsonObject1.put("name","⼩王");
jsonObject1.put("age",7);
JSONObject jsonObject2= newJSONObject();
jsonObject2.put("name","⼩");
jsonObject2.put("age",10);//从此处可以看出其实list和json也是互相转换的List jsonObjects = new ArrayList();
jsonObjects.add(jsonObject1);
jsonObjects.add(jsonObject2);
jsonObject.put("fans",jsonObjects);
System.out.println("jsonObject直接创建json:" +jsonObject);
}//第⼆种⽅法,⽤map⽅式
static voidmapCreateJson(){
Map map = new HashMap();
map.put("name","王");
Map map1 = new HashMap();
map1.put("name","⼩王");
map1.put("age",7);
Map map2 = new HashMap();
map2.put("name","⼩");
map2.put("age",10);
List jsonObjects = new ArrayList();
jsonObjects.add(map1);
jsonObjects.add(map2);
map.put("fans",jsonObjects);
System.out.println("集合中Map创建json对象:" + newJSONObject(map));
}//第三种,也是⽐较常⽤的,⽤bean转换,(这⾥⽤的是map作为⼦json,如果必须要创建复杂bean对象,建议⽤Gjson操作) static voidbeanCreateJson(){
Actor actor= newActor();
actor.setName("王");
Map map1 = new HashMap();
map1.put("name","⼩王");
map1.put("age",7);
Map map2 = new HashMap();
map2.put("name","⼩");
map2.put("age",10);
List maps = new ArrayList();
maps.add(map1);
maps.add(map2);
actor.setFans(maps);json转换对象
System.out.println("java bean创建json对象:" + newJSONObject(actor));
}
}
2.3.1上⾯类缺少基本bean
Actor.java
importjava.util.List;importjava.util.Map;/*** Created by garfield on 2016/10/16.*/
public classActor {privateString name;private Listfans;publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public ListgetFans() {returnfans;
}public void setFans(Listfans) {this.fans =fans;
}
}
2.4 json的解析,这⾥写了两种解析⽅式,同样,⽐较常⽤的还是第⼆种,json转java bean
DemoParseJson.java
le.gson.*;importorg.json.JSONObject;importjava.util.Map;/*** Created by garfield on 2016/10/16.*/ public classDemoParseJson {public static voidmain(String[] args) {
String jsonString= "{\"fans\":[{\"name\":\"⼩王\",\"age\":7},{\"name\":\"⼩\",\"age\":10}],\"name\":\"王\"}"; normalParse(jsonString);
beanParse(jsonString);
}static voidnormalParse(String jsonString){
JSONObject jsonObject= newJSONObject(jsonString);//获取普通属性
System.out.println("姓名:");
System.out.println(" " + String("name"));//获取数组
System.out.println("粉丝:");for (Object fan : JSONArray("fans")) {
JSONObject object=(JSONObject)fan;
System.out.println(" 姓名:" + ("name") + ",年龄:" + ("age"));
}
}//org.json并不⽀持这种复杂的bean转换,所以这边⼜导⼊了gson的包
static voidbeanParse(String jsonString){
System.out.println("=========Gson解析=========");
JsonObject obj= newJsonParser().parse(jsonString).getAsJsonObject();
Actor actor= new Gson().fromJson(obj,Actor.class);
System.out.println("姓名:");
System.out.println(" " + ("name"));
System.out.println("粉丝:");for(Map map : Fans()) {
System.out.println(" 姓名:" + ("name") + "年龄:" + ("age"));
}
}
}
2.4.1顺便附上执⾏结果:
姓名:
王
粉丝:
姓名:⼩王,年龄:7姓名:⼩,年龄:10
=========Gson解析=========姓名:"王"粉丝:
姓名:⼩王年龄7.0姓名:⼩年龄10.0
ok,that'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论