资讯专栏INFORMATION COLUMN

慕课网_《JSON快速入门(Java版)》学习总结

shiina / 1726人阅读

摘要:时间年月日星期日说明本文部分内容均来自慕课网。慕课网教学示例源码无个人学习源码第一章课程概述课程介绍课程须知本课程面向所有使用语言进行开发的小伙伴。

时间:2017年05月21日星期日
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学示例源码:无
个人学习源码:https://github.com/zccodere/s...

第一章:课程概述 1-1 JSON课程介绍

课程须知

本课程面向所有使用Java语言进行开发的小伙伴。

JSON是行业内使用最为广泛的数据传输格式
课程大纲

JSON基础知识
Java中两种常见的JSON处理方式
综合运用
第二章:基础入门 2-1 什么是JSON

什么是JSON

JSON是一种与开发语言无关的、轻量级的数据格式。全称JavaScript Object Notation。

优点

易于人的阅读和编写
易于程序解析与生成

一个简单的JSON样例

2-2 数据类型表示

数据结构

Object:{}
Array:, []

基本类型

string
number
true
false
null

Object:对象数据结构

使用花括号{}包含的键值对结构,Key必须是string类型,value为任何基本类型或数据结构。

示意图

Array:数组数据格式

使用中括号[]来起始,并用逗号, 来分隔元素。

示意图

2-3 JSON数据演示

代码演示:

{
    "name" : "王小二",
    "age" : 25.2,
    "birthday" : "1990-01-01",
    "school" : "蓝翔",
    "major" : ["理发","挖掘机"],
    "has_girlfriend" : false,
    "car" : null,
    "house" : null,
    "comment" : "这是一个注释"
}
第三章:JSON in Java 3-1 JSON的使用

项目搭建

首先创建一个项目,教学使用maven进行构建,我学习时使用gradle进行构建。因本次课程以学习JSON为主,所以省略项目搭建过程,具体源码可参考我的github地址。

使用JSONObject生成JSON格式数据

代码演示:

/**
 * 通过 JSONObject 生成JSON
 */
private static void createJsonByJsonObject() {
    JSONObject wangxiaoer = new JSONObject();
    // 定义nullObject
    Object nullObject = null;
    wangxiaoer.put("name","王小二");
    wangxiaoer.put("age",25.2);
    wangxiaoer.put("birthday","1990-01-01");
    wangxiaoer.put("school","蓝翔");
    wangxiaoer.put("major",new String[]{"理发","挖掘机"});
    wangxiaoer.put("has_girlfriend",false);
    // 使用nullObject跳过编译器检查
    wangxiaoer.put("car",nullObject);
    wangxiaoer.put("house",nullObject);
    wangxiaoer.put("comment","这是一个注释");

    System.out.println(wangxiaoer.toString());

}
3-2 使用Map构建JSON

代码演示:

/**
 * 通过 HashMap 生成JSON
 */
public static void createJsonByMap(){
    Map wangxiaoer = new HashMap();

    Object nullObject = null;
    wangxiaoer.put("name","王小二");
    wangxiaoer.put("age",25.2);
    wangxiaoer.put("birthday","1990-01-01");
    wangxiaoer.put("school","蓝翔");
    wangxiaoer.put("major",new String[]{"理发","挖掘机"});
    wangxiaoer.put("has_girlfriend",false);
    // 使用nullObject跳过编译器检查
    wangxiaoer.put("car",nullObject);
    wangxiaoer.put("house",nullObject);
    wangxiaoer.put("comment","这是一个注释");
    // 通过 JSONObject 的构造函数接收一个 Map 生成 JSON
    System.out.println(new JSONObject(wangxiaoer).toString());
}
3-3 使用Java Bean构建对象

代码演示:

1.构建JavaBean

package com.myimooc.json.model;

import java.util.Arrays;

/**
 * Created by ChangComputer on 2017/5/21.
 */
public class Diaosi {
    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;
    // 使用 transient 关键字,生成 JSON 时忽略该字段
    private transient String ignore;

    public String getIgnore() {
        return ignore;
    }

    public void setIgnore(String ignore) {
        this.ignore = ignore;
    }

    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;
    }

    @Override
    public String toString() {
        return "Diaosi{" +
                "name="" + name + """ +
                ", school="" + school + """ +
                ", has_girlfriend=" + has_girlfriend +
                ", age=" + age +
                ", car=" + car +
                ", house=" + house +
                ", major=" + Arrays.toString(major) +
                ", comment="" + comment + """ +
                ", birthday="" + birthday + """ +
                ", ignore="" + ignore + """ +
                "}";
    }
}

2.编写构建代码

/**
 * 通过 JavaBean 生成JSON【推荐使用】
 */
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("这是一个注释");

    // 通过 JSONObject 的构造函数接收一个 Bean 生成 JSON
    System.out.println(new JSONObject(wangxiaoer).toString());
}
3-4 从文件读取JSON

代码演示:

1.添加common-io依赖

// https://mvnrepository.com/artifact/commons-io/commons-io
compile group: "commons-io", name: "commons-io", version: "2.5"

2.准备JSON数据文件

{
    "name" : "王小二",
    "age" : 25.2,
    "birthday" : "1990-01-01",
    "school" : "蓝翔",
    "major" : ["理发","挖掘机"],
    "has_girlfriend" : false,
    "car" : null,
    "house" : null,
    "comment" : "这是一个注释"
}

3.编写读取代码

package com.myimooc.json.demo;

import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;

/**
 * 读取 JSON 数据演示类
 * Created by ChangComputer on 2017/5/21.
 */
public class ReadJsonSample {

    public static void main(String[] args) throws IOException {
        createJsonByFile();
    }

    /**
     * 读取 JSON 数据
     * */
    public static void createJsonByFile() throws IOException {
        File file = new File(ReadJsonSample.class.getResource("/wangxiaoer.json").getFile());

        String content = FileUtils.readFileToString(file,"UTF-8");

        JSONObject jsonObject = new JSONObject(content);

        System.out.println("姓名:"+jsonObject.getString("name"));
        System.out.println("年龄:"+jsonObject.getDouble("age"));
        System.out.println("有没有女朋友?:"+jsonObject.getBoolean("has_girlfriend"));

        JSONArray majorArray = jsonObject.getJSONArray("major");
        for (int i = 0 ; i < majorArray.length(); i++) {
            System.out.println("专业"+(i+1)+":"+majorArray.get(i));
        }

        // 判断属性的值是否为空
        if(!jsonObject.isNull("nickname")){
            System.out.println("昵称:"+jsonObject.getDouble("nickname"));
        }
    }
}
3-5 从文件读取JSON判断null

代码演示:

// 判断属性的值是否为空
if(!jsonObject.isNull("nickname")){
    System.out.println("昵称:"+jsonObject.getDouble("nickname"));
}
3-6 总结

本章总结

讲解了如何生成JSON格式数据
讲解了如何解析JSONObject
第四章:GSON的使用 4-1 GSON介绍

开源地址

https://github.com/google/gson

GSON优点

功能更加强大
性能更加出色
使用方式更加便捷和简单
4-2 GSON生成JSON数据

代码演示:

1.添加依赖

// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: "com.google.code.gson", name: "gson", version: "2.8.0"

2.编写代码

package com.myimooc.json.gson;

import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.myimooc.json.model.Diaosi;

import java.lang.reflect.Field;

/**
 * 使用 GSON 进行 JSON 相关操作
 * Created by ChangComputer on 2017/5/21.
 */
public class GsonCreateSample {

    public static void main(String[] args) {
        createJsonByGsonBean();
    }

    /**
     *
     * 通过 JavaBean 生成JSON【推荐使用】
     */
    private static void createJsonByGsonBean() {
        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("这是一个注释");
        wangxiaoer.setIgnore("不要看见我");

        GsonBuilder gsonBuilder = new GsonBuilder();
        // 设置格式化输出
        gsonBuilder.setPrettyPrinting();
        // 自定义转换策略
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
            @Override
            public String translateName(Field f) {
                if(f.getName().equals("name")){
                    return "NAME";
                }
                return f.getName();
            }
        });
        // 生成Gson
        Gson gson = gsonBuilder.create();
        System.out.println(gson.toJson(wangxiaoer));
    }
}
4-3 生成JSON数据

代码演示:

package com.myimooc.json.gson;

import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.myimooc.json.model.Diaosi;

import java.lang.reflect.Field;

/**
 * 使用 GSON 进行 JSON 相关操作
 * Created by ChangComputer on 2017/5/21.
 */
public class GsonCreateSample {

    public static void main(String[] args) {
        createJsonByGsonBean();
    }

    /**
     *
     * 通过 JavaBean 生成JSON【推荐使用】
     */
    private static void createJsonByGsonBean() {
        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("这是一个注释");
        wangxiaoer.setIgnore("不要看见我");

        GsonBuilder gsonBuilder = new GsonBuilder();
        // 设置格式化输出
        gsonBuilder.setPrettyPrinting();
        // 自定义转换策略
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
            @Override
            public String translateName(Field f) {
                if(f.getName().equals("name")){
                    return "NAME";
                }
                return f.getName();
            }
        });
        // 生成Gson
        Gson gson = gsonBuilder.create();
        System.out.println(gson.toJson(wangxiaoer));
    }
}
4-4 GSON解析

代码演示:

package com.myimooc.json.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.myimooc.json.demo.ReadJsonSample;
import com.myimooc.json.model.Diaosi;
import com.myimooc.json.model.DiaosiWithBirthday;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

/**
 * 使用Gson解析 JSON 文件
 * Created by ChangComputer on 2017/5/21.
 */
public class GsonReadSample {
    public static void main(String[] args) throws IOException {
        createJsonByGsonFile();
    }

    /**
     * 读取 JSON 数据
     * */
    public static void createJsonByGsonFile() throws IOException {
        File file = new File(GsonReadSample.class.getResource("/wangxiaoer.json").getFile());

        String content = FileUtils.readFileToString(file,"UTF-8");

        // 无日期转换
        Gson gson = new Gson();

        Diaosi wangxiaoer = gson.fromJson(content,Diaosi.class);

        System.out.println(wangxiaoer.toString());

        // 带日期转换
        Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();

        DiaosiWithBirthday wangxiaoer2 = gson2.fromJson(content,DiaosiWithBirthday.class);

        System.out.println(wangxiaoer2.getBirthday().toString());

        // 集合类解析
        System.out.println(wangxiaoer2.getMajor());
        System.out.println(wangxiaoer2.getMajor().getClass());

    }
}
4-5 GSON解析日期转换

代码演示:

// 带日期转换
Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();

DiaosiWithBirthday wangxiaoer2 = gson2.fromJson(content,DiaosiWithBirthday.class);

System.out.println(wangxiaoer2.getBirthday().toString());
4-6 集合类解析

代码演示:

// 替换为集合类
private List major;

GSON会自动解析集合类字段

 // 集合类解析
System.out.println(wangxiaoer2.getMajor());
System.out.println(wangxiaoer2.getMajor().getClass());
4-7 总结

JSON和GSON

JSON是Android SDK官方的库
GSON适用于服务端开发
GSON比JSON功能更强大

JSON库的特点

功能:映射Java Object与json格式数据
1.通过Annotation注解来声明
2.支持自定义属性名称
3.支持包含或排序属性
4.支持自定义接口自己完成解析或生成过程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70091.html

相关文章

  • 课网_Java模板引擎之Freemarker》学习总结

    摘要:时间年月日星期日说明本文部分内容均来自慕课网。整体目录结构如下项目文件用于数据持久化配置项目配置配置视图解析器配置静态资源映射配置配置配置自定义指令配置解析器配置,类似于项目启动类新建,注册配置类,并将其和当前关联。 时间:2017年3月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:无个人学习源码:https://githu...

    xumenger 评论0 收藏0
  • 课网_《RxJava与RxAndroid基础入门学习总结

    时间:2017年10月16日星期一说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程简介 1-1 课程介绍 本门课程的主要内容 RxJava是什么 RxAndroid是什么 RxJava常用操作符(重点、难点) 怎样在项目中使用RxJava和RxAndroid 如何学...

    刘明 评论0 收藏0
  • 课网_《2小时学会SpringBoot》学习总结

    摘要:小时学会学习总结时间年月日星期六说明本文部分内容均来自慕课网。慕课网教学示例源码暂无。数据库操作下第六章事务管理事务管理只有查询的时候不加事务,其它任何操作都要加事务。第七章课程回顾课程回顾总结介绍安装配置的使用数据库操作 《2小时学会SpringBoot》学习总结 时间:2017年2月18日星期六说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示...

    aisuhua 评论0 收藏0
  • 课网_《SpringMVC数据绑定入门学习总结

    摘要:数据绑定入门学习总结时间年月日星期日说明本文部分内容均来自慕课网。慕课网教学示例源码个人学习源码第一章课程介绍数据绑定入门概述数据绑定概念来自百度百科简单绑定是将一个用户界面元素控件的属性绑定到一个类型对象实例上的某个属性的方法。 《SpringMVC数据绑定入门》学习总结 时间:2017年2月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.co...

    Karrdy 评论0 收藏0
  • 课网_《Spring入门篇》学习总结

    摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...

    Ververica 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<