【第22期】观点:IT 行业加班,到底有没有价值?

json和java对象的相互转换(json-lib和Gson的使用)

原创 2017年01月03日 14:42:35

java开发中时常会遇到jsonjava对象转换的情况,比如说一般接口调用返回的都是json格式的,我们要取出来用就得把它解析成我们想要的格式,有时候我们传递参数又需要把参数封装成json。这两天调试API经常需要转换他们,也接触了两种解析工具,这里就简单的记录一下。

一:JSON-lib的使用

1.  下载JSON-lib所需要的jar包。下载地址:

http://download.csdn.net/download/eson_15/9514985

2. 如何把java对象封装成 json

1)创建java对象。

 

public class Person {
	private String name;
	private int age;
	private String info;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}

2)创建一个带main方法的类进行测试。简单的json构造。

//java对象转换成json
//创建java对象
Person person=new Person();
person.setName("小周");
person.setAge(20);
person.setInfo("这是一个可爱的小宝宝");
//创建json对象
JSONObject jo=new JSONObject();
jo.put("name",person.getName());
jo.put("age", person.getAge());
jo.put("info", person.getInfo());
//将JSONObject转换成json。
String json=jo.toString();
System.out.println(json);

得到的结果是:

 

3)构造包含多个json对象和数组的json

 

//构造包含多层jsonObject和数组的接送对象
//构造第二个person JSONObject对象
JSONObject per=new JSONObject();
per.put("name","小刘");
per.put("age", 16);
per.put("info", "这是一个少年");
//构造person JSONObject数组
List<JSONObject> list=new ArrayList<JSONObject>(); 
list.add(jo);   //jo是上一步创造的json对象
list.add(per);
//构造猫对象
JSONObject cat=new JSONObject();
cat.put("color", "黄色");
cat.put("sex", "公猫");
//构造总对象,其中包括一个person对象和一个cat对象和一组键值对
JSONObject anm=new JSONObject();
anm.put("person",list);
anm.put("cat",cat);
anm.put("dog", "这是一只大狗");
//将JSONObject转换成json。
String json1=anm.toString();
System.out.println(json1);

结果是:

{"person":[{"name":"小周","age":20,"info":"这是一个可爱的小宝宝"},{"name":"小刘 ","age":16,"info":"这是一个少年"}],"cat":{"颜色":"黄色","性别":"公猫"},"":"这是一 只大狗"}

 

这里可以看到,实际上我们可以不不创建一个java类就可以封装一个json。此外我们我 们可以用jo.put(Map map)方法直接把Map转换成json

3. 解析jsonjava对象。

 

/*json转换成java对象*/
//创建json
String json2=json1;
//解析json jo 1为总json object,由上一步我们知道其中包括一个person JSONObject数组,一个cat JSONObject对象,一个键值对。
JSONObject jo1=JSONObject.fromObject(json2);   
JSONArray PersonArray=(JSONArray) jo1.get("person");  //解析数组
JSONObject cat1=jo1.getJSONObject("cat");   //解析JSONObject
String dog=jo1.getString("dog");  //解析键值对
//对PersonArray进行解析
List<Person> personlist=new ArrayList<Person>();
for(int i=0;i<PersonArray.size();i++){
	JSONObject personObject=(JSONObject) PersonArray.get(i);
	Person p=new Person(); 
	p.setName(personObject.getString("name"));   //string 的解析
	p.setAge(personObject.getInt("age"));   //int的解析
	p.setInfo(personObject.getString("info"));
	personlist.add(p);
}
//cat1的解析
String co=cat1.getString("color");
String sex=cat.getString("sex");
System.out.println("猫的颜色是:"+co+"  性别是"+sex);

输出结果正确,说明解析成功。

 

其实我们发现也不必一定要创建java对象才能够进行解析,完全可以把json解析成单独的java类型。总之使用json-lib解析或封装json是完全可以不要封装java对象这一步骤的。

 

 

二:Gson的使用。

如果说json-lib只是单纯的对json进行解析和封装,那么json就的的确确是jsonjava对象之间的转换了,它省去了先解析再封装的过程,只需要一步,就能够实现jsonjava对象的转换。

1.下载gson需要的jar包。下载地址:http://download.csdn.net/detail/lyq8479/8451103

2.导入jar包,把解压得到的三个jar全都放到WEB-INF下的lib文件夹中去。

 

3.构建java对象,使用gson一定是需要先构造java对象,java对象需要按照json的格式来构造,具体方法上一篇文章讲过 http://blog.csdn.net/guozili1/article/details/53946384

这里还是以刚才得到的上一部分得到的包含数组和jsonObject对象的复杂json为例

{
    "person": [
        {
            "name": "小周",
            "age": 20,
            "info": "这是一个可爱的小宝宝"
        },
        {
            "name": "小刘",
            "age": 16,
            "info": "这是一个少年"
        }
    ],
    "cat": {
        "color": "黄色",
        "sex": "公猫"
    },
    "狗": "这是一只大狗"
}

分析json发现有四对{}和一对[],四对{}对应的是总object,两个person object和一个cat object,两个person object形成一个person object数组。所以在java中我们需要创建一个总对象,这个自己随便命名,就叫anm好了,还要创建一个cat对象,和一个person对象,这两个对象的名字也可以自己命名,但是最好以对应的{}外边的名字首字母大写命名。每个对象的属性值都要和键值对的key保持一致,如果是对象或者数组或者list,也要和对应的{}前边的名字或对应[]前边的名字一样。总类的属性是由personlistcat对象和键值对的属性构成。最后的创建结果是:

Person.java

 

public class Person {
	private String name;
	private int age;
	private String info;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}

Cat.java

 

public class Cat {
	private String color;
	private String sex;
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
}

Anm.java

 

public class Anm {
	private List<Person> person;   //[]前边的 名字
	private Cat cat;  //{}前边的名字
	private String dog;   //键值对中的key
	public List<Person> getPerson() {
		return person;
	}
	public void setPerson(List<Person> person) {
		this.person = person;
	}
	public Cat getCat() {
		return cat;
	}
	public void setCat(Cat cat) {
		this.cat = cat;
	}
	public String getDog() {
		return dog;
	}
	public void setDog(String dog) {
		this.dog = dog;
	}
	
}

4.Java对象转换成json.只要按要求创建好java对象,就能很快的转换成json了。

 

/*gson转换java对象为json*/
//创建java对象
Person p1=new Person();     //创建person对象
p1.setName("小周");
p1.setAge(20);
p1.setInfo("这是一个可爱的小宝宝");
Person p2=new Person();
p2.setName("小刘");
p2.setAge(16);
p2.setInfo("这是一个少年");
Cat cat2=new Cat();      //创建cat对象
cat2.setColor("黄色");
cat2.setSex("公猫");
List<Person> list5=new ArrayList<Person>();   //创建person的list
list5.add(p1);
list5.add(p2);
Anm anmm=new Anm();    //创建总对象anm
anmm.setPerson(list5);
anmm.setCat(cat2);
anmm.setDog("这是一只小花狗");
//把anmm转换成json
Gson gs=new Gson();
String js=gs.toJson(anmm);
System.out.println(js);

5.json转换成java对象。

 

/*gson转换json为java对象*/
//以上一步得到的json js为例来进行转换
String json5=js;
//把json5解析成Anm对象
Gson gson=new Gson();
Anm an=gson.fromJson(json5, Anm.class);   
//如果我们需要的是person类的内容
for(int i=0;i<an.getPerson().size();i++){
	System.out.println("解析出来的姓名是"+an.getPerson().get(i).getName());
}

注:构造java对象那一步,如果是java对象转json的话,那没什么好说的,按照需要的创建java对象就好,如果是jsonjava对象,对象的属性可以不用按照json的格式完全写完,写自己需要的就可以,但是如果需要得到里层{}的值,必须把当前那个{}及其外部的所有{}对应的java对象都创建好。

 

总结:json-lib几乎不依赖java对象,而gson完全依赖java对象,所以我们一般不用到java对象或者需要构造的java对象很简单的时候采用json-lib比较方便,而当json很复杂,得到的数据还需要封装的时候用gson比较省时省力。

 

最后推荐一个可以在线校验和格式化json的网站http://www.bejson.com/

 

 


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Android使用Google Gson实现JSON字符串和对象、对象数组之间相互转换

最近一个项目需要用到JSON,需要在JSON字符串和对象之间相互转换,在网上找了些资料,发现google的Gson还是比较不错的。 废话不说,下面是简单的例子: 先上源码:下载(包含jar包) ...

使用JSON-LIB转换JAVA对象

使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:使用JSON-LIB,首先要有几个支持的包:http://json-lib.sourceforge.net 下载 <span style="font-family: Times

使用jackson对Java对象与JSON字符串相互转换的一些总结

总结一下自己使用jackson处理对象与JSON之间相互转换的心得。 jackson是一个用Java编写的,用来处理JSON格式数据的类库,它速度非常快,目前来看使用很广泛,逐渐替代了Gson和js...

使用Gson将Java对象转换为JSON

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。   Gson里最重要的对象有2个Gson 和 GsonBuilder   Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象   下面是几个小例子 1. toJson() example <pre name="

json对象和java对象的相互转换方法(json-lib、jackson、fastjson、gson)

一 使用json-lib包下的JSONObject和JSONArray转换 二 使用jackson-databind包下的ObjectMapper 三 使用fastjson 四 使用Google的Gs...

使用Gson实现Json和Java对象的转换

Gson是Google的开源项目(项目主页:<span style="font-family:

使用Gson将Java对象转换为JSON

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。   Gson里最重要的对象有2个Gson 和 GsonBuilder   Gson...

使用JSON-LIB转换JAVA对象

使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:使用JSON-LIB,首先要有几个支持的包:http://json-lib.sourceforge.net下载<span

使用JSON-LIB转换JAVA对象

使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作: 使用JSON-LIB,首先要有几个支持的包: http://json-lib.sourceforge.net下载json-lib-1.1-jdk15.jar commons-lang.jar、commons-logging.jar,commons-beanutils.jar 这些包可在tomcat/comon/lib下找到 EZMorph 下载地址http://ezmorph.sourceforge.net morph-1.0.1 下载地址

使用Gson将Java对象转换为Json

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和GsonBuilder。 Gson有2个最基本...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)