Json学习入门

 

什么是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.支持自定义接口自己完成解析/生成过程。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值