什么是JSON
JSON是一种与开发语言无关的,轻量级的数据格式。全称JavaScript Object Notation。
优点:易于人的阅读和编写,易于程序解析与生产
JSON是行业内使用最为广泛的数据传输格式
最常见的例子是开发手机app,调用服务API时,API使用JSON作为传输格式
同时还有很多用JSON作为数据存储的。
标准的JSON数据结构包括:
Object、Array、基本类型
基本类型包括:string,number,true,false,null
数据结构—Object
使用花括号{}包含的键值对结构,Key必须是string类型,value为任何基本类型或数据结构。
数据结构—Array
使用中括号[]来起始,并用逗号,来分隔元素。
每一个Object可以看做是一个对象,其中key是string类型的键,value可以为其他类型。
Java JSON使用:
1.引入maven依赖:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2.1使用JSONObject创建对象
private static void jsonObject() {
JSONObject wangxiaoer = new JSONObject();
Object nullObj = null;
try {
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);
wangxiaoer.put("car", nullObj);
wangxiaoer.put("house", nullObj);
wangxiaoer.put("comment", "这是一个注释");
System.out.println(wangxiaoer.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
2.2使用map创建json对象
private static void createJsonByMap() {
Map<String, Object> wangxiaoer = new HashMap<String, Object>();
Object nullObj = 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);
wangxiaoer.put("car", nullObj);
wangxiaoer.put("house", nullObj);
wangxiaoer.put("comment", "这是一个注释");
System.out.println(new JSONObject(wangxiaoer));
}
2.3使用javaBean创建json对象
private 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.setHoust(null);
wangxiaoer.setComment("这是一个注释");
System.out.println(new JSONObject(wangxiaoer));
}
2.4从文件中读取json对象
public static void main(String[] args) throws Exception {
File file = new File(ReadJSONSample.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
JSONObject jsonObject = new JSONObject(content);
if (!jsonObject.isNull("name")) {
System.out.println("姓名是:" + jsonObject.getString("name"));
}
if (!jsonObject.isNull("nickName")) {
System.out.println("昵称是:" + jsonObject.getString("nickName"));
}
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(majorArray.get(i));
}
}
GSON
GSON介绍:google开源的解析json的项目
引入maven:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.4</version>
</dependency>
gson生成json数据
public class GsonCreateSample {
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.setHoust(null);
wangxiaoer.setComment("这是一个注释");
//
Gson gson = new Gson();
System.out.println(gson.toJson(wangxiaoer));
}
}
可以使用注解申明生成的json名字:
@SerializedName("NAME")
private String name;
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.setHoust(null);
wangxiaoer.setComment("这是一个注释");
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(wangxiaoer));
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(wangxiaoer));
Java Bean中创建Json不暴露数据时应该添加transient关键字
private transient String ignore;
transient在bean字段上添加,在转换成json对象时会被忽略
Gson解析:
谷歌的Gson强大之处在于可以正向生成反向解析
Gson: 在java获取json数据,首先把json文件实例化为file对象,然后用file的工具类的静态方法转换成字符串,如FileUtils.readFileToString(file),然后实例化Gson对象,再调用fromJson方法解析json。
JSONObject可以将*.json文件解析成一个它的对象;Gson可以正向的生成,也可以解析成自己定义的一个JavaBean的对象
File file = new File(ReadJSONSample.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
Gson gson = new Gson();
Diaosi wangxiaoer = gson.fromJson(content, Diaosi.class);
System.out.println(wangxiaoer);
Gson解析,带日期转换
普通的json是没有日期格式的。
gson加了日期转化的方法GsonBuilder().setDateFormat("yyyy-MM-dd").create();
public class DiaosiWithBirthday {
private String name;
private String school;
private boolean has_girlfriend;
private double age;
private Object car;
private Object houst;
private String[] major;
private String comment;
private Date birthday;
File file = new File(ReadJSONSample.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
DiaosiWithBirthday wangxiaoer = gson.fromJson(content, DiaosiWithBirthday.class);
System.out.println(wangxiaoer);
Gson还有一个特点是可以将json的数组和java的集合类无缝对接
总结:
Json和Gson
Json是Android的官方库
Gson适用于服务端开发
GSON比JSOn功能更强大
关于JSON库的总结
功能:映射Java Object与Json格式数据
1.通过Annotation注解来声明
2.支持自定义属性名称
3.支持包含或排除属性
4.支持自定义接口自己完成解析/生成过程。