Json

一.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数据格式

package com.inspire.ssm.common;

import lombok.Getter;
import lombok.Setter;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by yaming on 18-2-7.
 */
@Getter
@Setter
public class JsonData {
    private boolean ret;
    private String msg;
    private Object data;

    public JsonData(boolean ret){
        this.ret=ret;
    }

    public static JsonData success(Object obj,String msg){
        JsonData jsonData=new JsonData(true);
        jsonData.setData(obj);
        jsonData.setMsg(msg);
        return jsonData;
    }

    public static JsonData success(Object obj){
        JsonData jsonData=new JsonData(true);
        jsonData.setData(obj);
        return jsonData;
    }

    public static JsonData success(){
        return new JsonData(true);
    }
    public static JsonData fail(String msg){
        JsonData jsonData=new JsonData(false);
        jsonData.setMsg(msg);
        return jsonData;
    }

    public Map<String,Object> toMap(){
        Map<String,Object> result=new HashMap<String,Object>();
        result.put("ret",ret);
        result.put("msg",msg);
        result.put("data",data);
        return result;
    }

}

 

 

 
 
 

 

posted @ 2018-04-22 17:21  inspire0x001  阅读(167)  评论(0编辑  收藏  举报