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
org.json
json
20170516
下载的地方:
(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 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(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
运行结果:
姓名是:屌丝
年龄是:25.5
专业-1:理发师
专业-2:挖掘机