json和java对象的转换

java自身没有提供相关的库。常用的第三方库有:JSON-lib,gson,Jackson

JSON-lib 依赖第三方库较多。速度较慢。

后面两个速度比较快,三者功能差不多。

(1) bean转换json
Gson gson = new Gson();
String json = gson.toJson(obj);  //obj是对象

(2)json转换bean
Gson gson = new Gson();
String json = "{\"id\":\"2\",\"name\":\"Json技术\"}";
Book book = gson.fromJson(json, Book.class);

(3)json转换复杂的bean,比如List,Set
将json转换成复杂类型的bean,需要使用TypeToken
Gson gson = new Gson();
String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
//将json转换成List
List list = gson.fromJson(json,new TypeToken<LIST>() {}.getType());
//将json转换成Set
Set set = gson.fromJson(json,new TypeToken<SET>() {}.getType());
package gaofeng.jackson;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

	public static void main(String[] args) throws Exception {
		SubPkg spkg = new SubPkg();
		spkg.setName("gaofeng");
		spkg.setAge(23);
		
		Pkg pkg = new Pkg();
		pkg.setName("pkgname");
		pkg.setSubPkgList(Arrays.asList(spkg));
		pkg.setSubPkgs(new SubPkg[] {spkg});
		
		ObjectMapper mapper = new ObjectMapper();
		String json1 = mapper.writeValueAsString(spkg);
		System.out.println(json1);
		String json2 = mapper.writeValueAsString(pkg);
		System.out.println(json2);
		
		mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
		mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);
		
		String jsonStr = "{name:'pkgname',subPkgs:[{name:'gaofeng',age:23}],subPkgList:[{name:'gaofeng',age:23}]}";
		HashMap<String, ?> map = mapper.readValue(jsonStr, HashMap.class);
		System.out.println(map);
		
		Pkg pkg2 = mapper.readValue(jsonStr, Pkg.class);
		System.out.println(pkg2.getSubPkgList().get(0).getAge() + pkg2.getName());
		
		jsonStr = "{name:'gaofeng',age:23}";

		map = mapper.readValue(jsonStr, HashMap.class);
		System.out.println(map);
		
		SubPkg spkg2 = mapper.readValue(jsonStr, SubPkg.class);
		System.out.println(spkg2.getAge() + spkg2.getName());
	}

}
class Pkg{
	private String name;
	private SubPkg[] subPkgs;
	private List<SubPkg> subPkgList;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public SubPkg[] getSubPkgs() {
		return subPkgs;
	}
	public void setSubPkgs(SubPkg[] subPkgs) {
		this.subPkgs = subPkgs;
	}
	public List<SubPkg> getSubPkgList() {
		return subPkgList;
	}
	public void setSubPkgList(List<SubPkg> subPkgList) {
		this.subPkgList = subPkgList;
	}
}
class SubPkg{
	private String name;
	private int age;
	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;
	}	
}

Jackson快速入门(包括注解,配置,美化等) https://blog.csdn.net/u011054333/article/details/80504154

JSON字符串和java对象的互转【json-lib】https://www.cnblogs.com/free-dom/p/5801866.html

 

猜你喜欢

转载自blog.csdn.net/ggaofengg/article/details/81370059