java学习——json的构建和解析

1、什么是json

JSON(JavaScript Object Notation)是一种与开发语言无关的,轻量级的数据格式。json是由key和value组成:


{
	"title" : "JSON入门-Java篇",
	"author" : "Anthony",
	"author" : ["JSON基础","JSON常用处理方法介绍"],
	“time” : {
	 	“value” : 2017,
	    “unit” : “天”
	}
}

从上面可以看出:

1)都是字典组成,左边是key,右边是value。

2)支持嵌套,记得多对到括号是成对出现,容易丢失一半。

3)除了最后一个元素,其他元素后面都加上逗号,这个容易丢失,写错。

4)value部分如果是字符串,一定要用引号引用起来,如果是数字,直接写数字就可以,当然,数字引用起来也可以,就当做是字符串存储。

2、JSON中数据类型

JSON中数据类型也分基本数据类型和数据结构类型

1)数据结构类型

上面例子中的大括号({})和中括号([]), 大括号表示是结构体类型(object),中括号表示是数组类型(array)。

2)基本数据类型

有5中基本数据类型:string, number, true, false,null

注意在java中Number是个抽象类,它下面的有六个子类,属于包装类:Integer、Long、Byte、Double、Float、Short;

参看博文:https://blog.csdn.net/u013453970/article/details/47414553

       其中,字符串类型就是用双引号包裹的,数字类型,直接写数字就可以,如果数字用双引号,就变成了字符串。true和false是布尔型,还有一种为空,用关键字null表示。

例子:利用数据类型来描述一个屌丝

​

{
	“name” : “张三”,
	“age” :  24.5,
	“birthday" : "19xx-xx-xx",
	“school” : “蓝翔技校”,
	“major” : ["理发师", "挖掘机"],
	“car” : null,
	“has_hourse” : false,
	“has_girlfriend : false
}

​

注意:为什么上面写那么多文字来描述,哈哈,因为在json格式中,不支持写注释,所以,我用了那么多文字来一一限定,实际上就是给下面JSON例子写的注释

3、用json.org来构建JSON数据并输出

(1)在官网下载json.org.jar的jar包或者使用maven项目加载依赖包:

http://mvnrepository.com/artifact/org.json/json/20170516

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

下载的地方:

(2)上代码:

package script;

import org.json.JSONObject;

public class jsonDemo {

    public static void example(){
        Object nullObject = null;
        JSONObject diaosi=new JSONObject();
        diaosi.put("name","屌丝");
        diaosi.put("age",25.5);
        diaosi.put("birthday","1986-06-03");
        diaosi.put("school","蓝翔技校");
        diaosi.put("major",new String[]{"理发师","挖掘机"});
        diaosi.put("car",false);
        diaosi.put("has_girlfriend",false);
        // // 使用nullObject跳过编译器检查
        diaosi.put("hourse",nullObject);

        System.out.println(diaosi.toString());
    }

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

}

运行结果:

{"birthday":"1986-06-03","major":["理发师","挖掘机"],"school":"蓝翔技校","car":false,"name":"屌丝","has_girlfriend":false,"age":25.5}

结果中没有hourse一项

4、用HashMap来构建JSON

(1)上代码:

package script;

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

public class jsonDemo1 {
    public static void example(){
        //Object nullObject = null;
        Map diaosi=new HashMap();
        diaosi.put("name","屌丝");
        diaosi.put("age",25.5);
        diaosi.put("birthday","1986-06-03");
        diaosi.put("school","蓝翔技校");
        diaosi.put("major",new String[]{"理发师","挖掘机"});
        diaosi.put("car",false);
        diaosi.put("has_girlfriend",false);
        diaosi.put("hourse",null);

        System.out.println(diaosi.toString());
    }

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

结果:

{birthday=1986-06-03, major=[Ljava.lang.String;@1540e19d, school=蓝翔技校, car=false, name=屌丝, has_girlfriend=false, hourse=null, age=25.5}

(2)上代码

​
package script;

import org.json.JSONObject;

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

public class jsonDemo1 {
    public static void example(){
       Map<String,Object> diaosi=new HashMap<String,Object>();
        diaosi.put("name","屌丝");
        diaosi.put("age",25.5);
        diaosi.put("birthday","1986-06-03");
        diaosi.put("school","蓝翔技校");
        diaosi.put("major",new String[]{"理发师","挖掘机"});
        diaosi.put("car",false);
        diaosi.put("has_girlfriend",false);
        diaosi.put("hourse",null);

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

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

​

运行结果:里面也没有horse

{"birthday":"1986-06-03","major":["理发师","挖掘机"],"school":"蓝翔技校","car":false,"name":"屌丝","has_girlfriend":false,"age":25.5}

注意:这种和上面那种不一样,上面只是一个HashMap对象

下面这个例子:diaosi先是一个HashMap对象,然后又把这个对象当做一个JSONObject对象来传入,从而,有了toString的方法

5、用JavaBean来构建JSON

先构建JavaBean

package script;

public class DiaoSi {
    private String name;
    private String school;
    private boolean has_girlfriend;
    private double age;
    private Object hourse;
    private String[] major;
    private String birthday;

    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 getHourse() {
        return hourse;
    }

    public void setHourse(Object hourse) {
        this.hourse = hourse;
    }

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

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

    public String getBirthday() {
        return birthday;
    }

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

    public String getIgnore() {
        return ignore;
    }

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



    private transient String ignore;

    public String getName() {
        return name;
    }

    public String getSchool() {
        return school;
    }

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

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

上面的get和set方法可以直接利用ide生成。

写测试类:同一个包中不同类调用不用导入

package script;


import org.json.JSONObject;


public class createJsonByBean {
    public static void main(String[] args){
        DiaoSi diaosi=new DiaoSi();

        diaosi.setName("屌丝");
        diaosi.setAge(25.5);
        diaosi.setBirthday("1986-06-03");
        diaosi.setSchool("蓝翔技校");
        diaosi.setMajor(new String[]{"理发师","挖掘机"});
        diaosi.setHas_girlfriend(false);
        diaosi.setHourse(null);

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


}

运行结果:

{"birthday":"1986-06-03","major":["理发师","挖掘机"],"school":"蓝翔技校","name":"屌丝","has_girlfriend":false,"age":25.5}

6、对JSON数据进行解析操作

(1)创建一个test.json文件

将上面运行结果复制到test.json文件中,放在目录下

(2)添加commons-io.jar依赖包

(3)上代码

​
package script;

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

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

public class ReadJson {
    public static void main(String[] args) throws IOException {
        File file=new File("./src/test/java/resourse/test.json");
        String content= FileUtils.readFileToString(file,"utf8");
        JSONObject jsonObject=new JSONObject(content);
        System.out.println("姓名是:"+jsonObject.getString("name"));
        System.out.println("年龄是:"+jsonObject.getDouble("age"));
        //把json数组对象转换成Java的数组对象
        JSONArray jsonarray=jsonObject.getJSONArray("major");

        for(int i=0;i<jsonarray.length();i++){
            System.out.println("专业-"+(i+1)+":"+jsonarray.get(i));
        }

    }

}

​

运行结果:

姓名是:屌丝
年龄是:25.5
专业-1:理发师
专业-2:挖掘机

猜你喜欢

转载自blog.csdn.net/weixin_39430584/article/details/82682986