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