一.Json
1.什么是Json?
Json是我们传输数据时用到的一种数据格式。还有其他的传输数据的格式,如 纯文本,XML等
2.如何构建json数据?
(1).使用org.json.JSONObject 构建Json数据。
/** ????* 使用JsonObject构建Json数据 ????*/ ???public static void JsonObject1() { ???????JSONObject jsonObject=new JSONObject(); ???????Object obj=null; ???????try { ???????????jsonObject.put("id",1); ???????????jsonObject.put("name","小强"); ???????????jsonObject.put("age",20); ???????????jsonObject.put("major",new java.lang.String[]{"aa","bb"}); ???????????jsonObject.put("car",obj); ???????????jsonObject.put("isGood",true); ???????????System.out.println(jsonObject.toString()); ???????} catch (JSONException e) { ???????????e.printStackTrace(); ???????} ???}
(2).使用Hashmap构建Json数据
/** ????* 使用Hashmap构建Json数据 ????*/ ???public static void JsonObject2(){ ???????Map<String,Object> map=new HashMap<String, Object>(); ???????Object obj=null; ???????map.put("id",1); ???????map.put("name","小强"); ???????map.put("age",20); ???????map.put("major",new String[]{"aa","bb"}); ???????map.put("car",obj); ???????map.put("isGood",true); ???????JSONObject jsonObject=new JSONObject(map);//通过构造方法,把map放进去 ???????System.out.println(jsonObject.toString()); ???}
(3).javaBean构建json数据
我们有一个JavaBean
public class User { ???private int id;private String name; ???private int age; ???private String birthday; ???private String[] major; ???private Object car; ???private boolean have; ???private Date time; ???public int getId() { ???????return id; ???} ???public void setId(int id) { ???????this.id = id; ???} ???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 getBirthday() { ???????return birthday; ???} ???public void setBirthday(String birthday) { ???????this.birthday = birthday; ???} ???public String[] getMajor() { ???????return major; ???} ???public void setMajor(String[] major) { ???????this.major = major; ???} ???public Object getCar() { ???????return car; ???} ???public void setCar(Object car) { ???????this.car = car; ???} ???public boolean isHave() { ???????return have; ???} ???public Date getTime() { ???????return time; ???} ???public void setTime(Date time) { ???????this.time = time; ???} ???public void setHave(boolean have) { ???????this.have = have; ???} ???@Override ???public String toString() { ???????return "User{" + ???????????????"id=" + id + ???????????????", name=‘" + name + ‘\‘‘ + ???????????????", age=" + age + ???????????????", birthday=‘" + birthday + ‘\‘‘ + ???????????????", major=" + Arrays.toString(major) + ???????????????", car=" + car + ???????????????", have=" + have + ???????????????‘}‘; ???}}
/** ????* javaBean构建json数据 ????*/ ???public static void JsonObject3(){ ???????User user=new User(); ???????user.setId(1); ???????user.setName("aa"); ???????user.setAge(20); ???????user.setBirthday("2011-2-22"); ???????user.setCar(null); ???????user.setHave(true); ???????user.setMajor(new String[]{"aa","bb"}); ???????JSONObject jsonObject=new JSONObject(user);//通过构造方法把对象放进去 ???????System.out.println(jsonObject); ???}
3.如何读取一个Json数据
我们有一个Json格式的数据文件
{ ?"major":["aa","bb"], ?"isGood":true, ?"name":"小强", ?"id":1, ?"age":20}
读取这个文件,并输出里面的信息
public static void main(String[] args) throws IOException, JSONException { ???????File file=new File(ReadJsonSample.class.getResource("/user.json").getFile()); ???????String content= FileUtils.readFileToString(file); ???????JSONObject jsonObject=new JSONObject(content); ???????System.out.println(jsonObject.getInt("id")); ???????System.out.println(jsonObject.getString("name")); ???????System.out.println(jsonObject.getInt("age")); ???}
二.Gson
1.用com.google.gson.Gson构建gson数据
public static void Gson1(){ ???????User user=new User(); ???????user.setId(1); ???????user.setName("aa"); ???????user.setAge(20); ???????user.setBirthday("2011-2-22"); ???????user.setCar(null); ???????user.setHave(true); ???????user.setMajor(new String[]{"aa","bb"}); ???????user.setTime(new Date());
???????Gson gson=new Gson();
System.out.println(gson.toJson(user));
}
2.优点
public class User { ???private int id; ???@SerializedName("Name") ???private String name; ???private transient int age; ???private String birthday; ???private String[] major; ???private Object car; ???private boolean have; ???private Date time; ???public int getId() { ???????return id; ???} ???public void setId(int id) { ???????this.id = id; ???} ???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 getBirthday() { ???????return birthday; ???} ???public void setBirthday(String birthday) { ???????this.birthday = birthday; ???} ???public String[] getMajor() { ???????return major; ???} ???public void setMajor(String[] major) { ???????this.major = major; ???} ???public Object getCar() { ???????return car; ???} ???public void setCar(Object car) { ???????this.car = car; ???} ???public boolean isHave() { ???????return have; ???} ???public Date getTime() { ???????return time; ???} ???public void setTime(Date time) { ???????this.time = time; ???} ???public void setHave(boolean have) { ???????this.have = have; ???} ???@Override ???public String toString() { ???????return "User{" + ???????????????"id=" + id + ???????????????", name=‘" + name + ‘\‘‘ + ???????????????", age=" + age + ???????????????", birthday=‘" + birthday + ‘\‘‘ + ???????????????", major=" + Arrays.toString(major) + ???????????????", car=" + car + ???????????????", have=" + have + ???????????????‘}‘; ???}}
1.@SerializedName("Name") 加在属性上,可以修改属性在gson数据中的格式
2.使用transient关键字时,
private transient int age; ??生成json数据时会忽略掉这个属性
3.可以格式化数据。
GsonBuilder gsonBuilder=new GsonBuilder();
gsonBuilder.setPrettyPrinting(); ?输出的json数据更美观。
gsonBuilder.setDateFormat("yyyy-mm-dd"); ??提供日期转换,json只能提供string格式的日期
Gson gson=gsonBuilder.create();
三.自定义返回的Json数据格式
import com.fasterxml.jackson.annotation.JsonInclude;import java.io.Serializable;/** * ajax 请求的返回类型封装JSON结果 */@JsonInclude(JsonInclude.Include.NON_NULL)public class BaseResult<T> implements Serializable { ???private static final long serialVersionUID = -4185151304730685014L; ???private boolean success; ???private T data; ???private String error; ???public BaseResult(boolean success, String error) { ???????this.success = success; ???????this.error = error; ???} ???public BaseResult(boolean success, T data) { ???????this.success = success; ???????this.data = data; ???} ???public boolean isSuccess() { ???????return success; ???} ???public void setSuccess(boolean success) { ???????this.success = success; ???} ???public T getData() { ???????return data; ???} ???public void setData(T data) { ???????this.data = data; ???} ???public String getError() { ???????return error; ???} ???public void setError(String error) { ???????this.error = error; ???} ???@Override ???public String toString() { ???????return "BaseResult [success=" + success + ", data=" + data + ", error=" + error + "]"; ???}}
Json
原文地址:https://www.cnblogs.com/inspred/p/8908382.html