JSON

定义:
JSON是一种与开发语言无关的、轻量级的数据格式。全称为JavaScript Object Notation。
优点:易于人的阅读和编写,易于程序解析和生产。
标准的JSON数据表示
数据结构
Object
Array
基本类型
String、number、true、false、null。
数据结构-Object:
使用花括号{}包含的键值对结构,Key必须是String类型,value为任何基本类型或数据结构。
数据结构-Array
使用中括号[ ]来起始,并用逗号,分隔元素。

{
    "name":"张三",
    "age":25,
    "birthday":"1990-01-01", 
    "school":"蓝翔",
    "major":["理发","挖掘机"],
    "has_girlfirend":false,
    "car":null,
    "house":null
}

注:
json中没有日期这个数据格式,一般用字符串表示
json不支持任何形式的注释,可以采取下面的方式添加注释:
“comment”:”这是一个注释”

JSON的使用
添加JSON包的依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20090211</version>
</dependency>

在java中使用JSON
1.使用put方法构建JSON

import org.json.JSONException;
import org.json.JSONObject;

public class JSONObjectSample {
    public static void main(String[] args) {
        jsonObject();
}

    public static void jsonObject(){
            JSONObject wangxiaoer = new JSONObject();
            Object nullObj = null;
        try {
            wangxiaoer.put("name","wangxiaoer");
            wangxiaoer.put("age",25.2);
            wangxiaoer.put("birthday","1990-01-01");
            wangxiaoer.put("major",new String[]{"理发","挖掘机"});
            wangxiaoer.put("has_girlfriend",false);
            wangxiaoer.put("car",nullObj);
            wangxiaoer.put("house",nullObj);
            wangxiaoer.put("comment","这是一个注释");
            System.out.println(wangxiaoer.toString());

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}

2.使用Map构建JSON

    public static void createJsonByMap(){
        Map<String,Object> wangxiaoer = new HashMap<String,Object>();
        Object nullObj = null;
        wangxiaoer.put("name","wangxiaoer");
        wangxiaoer.put("age",25.2);
        wangxiaoer.put("birthday","1990-01-01");
        wangxiaoer.put("major",new String[]{"理发","挖掘机"});
        wangxiaoer.put("has_girlfriend",false);
        wangxiaoer.put("car",nullObj);
        wangxiaoer.put("house",nullObj);
        wangxiaoer.put("comment","这是一个注释");

        System.out.println(new JSONObject(wangxiaoer).toString());
    }

3.使用Java Bean构建对象

  public static void createJsonByBean(){
        Diaosi wangxiaoer= new Diaosi();
        wangxiaoer.setName("王小二");
        wangxiaoer.setAge(25.2);
        wangxiaoer.setBirthday("1990-01-01");
        wangxiaoer.setSchool("蓝翔");
        wangxiaoer.setMajor(new String[]{"理发","挖掘机"});
        wangxiaoer.setHas_girlfriend(false);
        wangxiaoer.setCar(null);
        wangxiaoer.setHouse(null);
        wangxiaoer.setComment("这是一个注释");
        System.out.println(new JSONObject(wangxiaoer));
    }

4.从文件读取JSON
添加依赖,便于文件读取。

<dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

main方法

    public static void main(String[] args) throws IOException, JSONException {
        //1.得到文件对象并解析
        File file = new File(ReadJSONSample.class.getResource("/wangxiaoer.json").getFile());
        String content = FileUtils.readFileToString(file);
        JSONObject jsonObject = new JSONObject(content);
        System.out.println("姓名是:"+jsonObject.get("name"));
        System.out.println("年龄:"+jsonObject.get("age"));
        System.out.println("有没有女朋友?"+jsonObject.getBoolean("has_girlfriend"));
        JSONArray majorArray = jsonObject.getJSONArray("major");
        for(int i=0;i<majorArray.length();i++){
            String m = (String) majorArray.get(i);
            System.out.println("专业-"+(i+1)+m);
        }

    }

5.从文件中读取JSON判断null

  if(!jsonObject.isNull("name")){
            System.out.println("姓名是:"+jsonObject.get("name"));
        }

6.GSON生成JSON数据
Gson的特性:
1./告诉gson在转化为json对象时将name改为NAME/
@SerializedName(“NAME”)
private String name;
Diaosi实体类:
Diaosi.class

import com.google.gson.annotations.SerializedName;

public class Diaosi {

    /*告诉gson在转化为json对象时将name改为NAME*/
    @SerializedName("NAME")
    private String name;
    private String school;
    private boolean has_girlfriend;
    private double age;
    private Object car;
    private Object house;
    private String[] major;
    private String comment;
    private String birthday;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public boolean isHas_girlfriend() {
        return has_girlfriend;
    }

    public void setHas_girlfriend(boolean has_girlfriend) {
        this.has_girlfriend = has_girlfriend;
    }

    public double getAge() {
        return age;
    }

    public void setAge(double age) {
        this.age = age;
    }

    public Object getCar() {
        return car;
    }

    public void setCar(Object car) {
        this.car = car;
    }

    public Object getHouse() {
        return house;
    }

    public void setHouse(Object house) {
        this.house = house;
    }

    public String[] getMajor() {
        return major;
    }

    public void setMajor(String[] major) {
        this.major = major;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

main方法:

 public static void main(String[] args) {

        Diaosi wangxiaoer= new Diaosi();
        wangxiaoer.setName("王小二");
        wangxiaoer.setAge(25.2);
        wangxiaoer.setBirthday("1990-01-01");
        wangxiaoer.setSchool("蓝翔");
        wangxiaoer.setMajor(new String[]{"理发","挖掘机"});
        wangxiaoer.setHas_girlfriend(false);
        wangxiaoer.setCar(null);
        wangxiaoer.setHouse(null);
        wangxiaoer.setComment("这是一个注释");

        Gson gson = new Gson();
        System.out.println(gson.toJson(wangxiaoer));
    }

运行结果:
{“NAME”:”王小二”,”school”:”蓝翔”,”has_girlfriend”:false,”age”:25.2,”major”:[“理发”,”挖掘机”],”comment”:”这是一个注释”,”birthday”:”1990-01-01”}

2.GsonBuilder将json数据美化

 GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        Gson gson = gsonBuilder.create();
        //Gson gson = new Gson();
        System.out.println(gson.toJson(wangxiaoer));

运行结果:
{
“NAME”: “王小二”,
“school”: “蓝翔”,
“has_girlfriend”: false,
“age”: 25.2,
“major”: [
“理发”,
“挖掘机”
],
“comment”: “这是一个注释”,
“birthday”: “1990-01-01”
}
3.用GSON在解析json对象时使用自定义的策略

 GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy(){

            @Override
            public String translateName(Field field) {

                if(field.getName().equals("name")){
                    return "NAME";
                }
                return field.getName();
            }
        });
        Gson gson = gsonBuilder.create();
        //Gson gson = new Gson();
        System.out.println(gson.toJson(wangxiaoer));

4.private transient String birthday;
在实体类的属性前加transient,声明在生成json时,忽略这个属性。
5.可以反向解析,直接解析为实体类而JSONObject只能解析为JSONObject。
//1.得到文件对象并反解析
File file = new File(ReadJSONSample.class.getResource(“/wangxiaoer.json”).getFile());
String content = FileUtils.readFileToString(file);
Gson gson = new Gson();
Diaosi wangxuaier = gson.fromJson(content,Diaosi.class);
6.GSON解析 带日期转换

      Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
      DiaosiWithBirthday wangxiaoer = gson.fromJson(content,DiaosiWithBirthday.class);
      System.out.println(wangxiaoer.getBirthday());

7.集合类解析
Gson识别集合直接反解析为集合实例

功能:
映射java Object与json格式数据
判断json库好不好的标准
1.通过Annotation注解来声明。
2.支持自定义属性名称
3.支持包含或排除属性
4.支持自定义接口自己完成解析/生成过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值