Java小白的学习笔记(七)——浅谈JSON

本文介绍了JSON数据格式及其优点,并对比展示了使用Java中的JSONObject、HashMap和JavaBean构建JSON数据的方法。此外,还深入探讨了Gson库的使用,包括如何美化输出、自定义字段名策略及忽略特定属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON:JSON是一种与开发语言无关的轻量级的数据格式全称是:JavaScript Object Notation。可以说他是一种数据格式的标准,或者规范。

JSON的优点:易于人的阅读和编写,易于程序解析与生成

标准的JSON数据表示:数据结构:Object,Array;基本类型:string,number(无浮点数之分),true,false,null。

  • 数据结构:Object:使用花括号{}包含的键值对结构,Key必须是string类型(使用双引号“key”来进行包装),value为任何基本类型或数据结构,中间用冒号对应。
  • 数据结构:Array:使用中括号[]来起始,并用逗号来分割元素,元素可以是任何类型(基本类型和数据结构)

下面我们来看一个JSON格式的简单样例:

private static void jsonObject() {
		// TODO Auto-generated method stub
		JSONObject jsonObject = new JSONObject();
		Object objectnull = null;
		jsonObject.put("name", "小姚同学");
		jsonObject.put("age", "22");
		jsonObject.put("birthday", "1997-01-10");
		jsonObject.put("school", "蓝翔");
		jsonObject.put("major", new String[] {"理发","挖掘机"});
		jsonObject.put("has_boyfriend", true);
		jsonObject.put("car", objectnull);
		jsonObject.put("comment", "这是一个注释");
		
		System.out.println(jsonObject.toString());
	}

下面,我们来通过hashmap的方式来构建json数据结构

private static void createJsonByMap() {
		//创建一个hashmap
		HashMap<String, Object> xiaoyao = new HashMap<String, Object>();
		Object objectnull = null;
		xiaoyao.put("name", "小姚同学");
		xiaoyao.put("age", "22");
		xiaoyao.put("birthday", "1997-01-10");
		xiaoyao.put("school", "蓝翔");
		xiaoyao.put("major", new String[] {"理发","挖掘机"});
		xiaoyao.put("has_boyfriend", true);
		xiaoyao.put("car", objectnull);
		xiaoyao.put("comment", "这是一个注释");
		
		JSONObject jsonObject = new JSONObject(xiaoyao);
		System.out.println(jsonObject.toString());
	}

方法类似,区别在于先创建HashMap,然后用JSONObject的构造函数传入HashMap,多了这一步骤。

下面,我们来看一下用JavaBean来构建一个对象

private static void createJsonByBean() {
		Human huam= new Human();
		huam.setName("小姚同学");
		huam.setAge(22);
		huam.setBirthday("1997-1-10");
		huam.setSchool("蓝翔");;
		huam.setMajor(new String[] {"理发","挖掘机"});
		huam.setCar(null);
		huam.setHas_boyfriend(true);
		huam.setComment("这是一个注释");
		
		JSONObject J = new JSONObject(huam);
		System.out.println(J.toString());
	}

下面看一下如何解析一个JSON数据
首先要创建一个JSON数据对象
然后要获取这个文件
最后解析这个文件来打印输出

{
	"name" : "小姚同学",
	"age" : 20,
	"birthday" : "1997-1-10",
	"school" : "蓝翔",
	"car" : null,
	"comment" : "这是一个注释",
	"major" : ["理发","挖掘机"]

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		File file = new File(ReadJson.class.getResource("xiaoyaotongxue.json").getFile());
		String content = FileUtils.readFileToString(file);
		
		JSONObject jsonObject = new JSONObject(content);
		System.out.println("姓名是:" + jsonObject.getString("name"));
		System.out.println("年龄是:" + jsonObject.getInt("age"));
		System.out.println("生日是:" + jsonObject.getString("birthday"));
		System.out.println("学校是:" + jsonObject.getString("school"));
		System.out.println("课程有:" + jsonObject.getJSONArray("major"));
	}
}

看一下输出结果:在这里插入图片描述

很棒,木的问题!

接下来我们来学习一个更为方便,高效的数据格式——GSON

GSON是Google给出的一个开源项目,可以说他是对json的一个改进

一样的,首先我们要引入gson 的依赖包,一样在pom文件中
在这里插入图片描述

然后来看一下代码

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Human huam= new Human();
		huam.setName("小姚同学");
		huam.setAge(22);
		huam.setBirthday("1997-1-10");
		huam.setSchool("蓝翔");;
		huam.setMajor(new String[] {"理发","挖掘机"});
		huam.setCar(null);
		huam.setHas_boyfriend(true);
		huam.setComment("这是一个注释");
		
		Gson gson = new Gson();
		System.out.println(gson.toJson(huam));
	}

复用一下前面的代码,用JavaBean来创建一个Human对象
然后创建一个Gson对象,调用.toJson方法,传入Human对象就好了在这里插入图片描述
可能有些同学会说,这个json不一样吗,没看出来好在哪里

下面我用一个例子来说一个好处:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Human huam= new Human();
		huam.setName("小姚同学");
		huam.setAge(22);
		huam.setBirthday("1997-1-10");
		huam.setSchool("蓝翔");;
		huam.setMajor(new String[] {"理发","挖掘机"});
		huam.setCar(null);
		huam.setHas_boyfriend(true);
		huam.setComment("这是一个注释");
		
		GsonBuilder gsonBuilder = new GsonBuilder();
		gsonBuilder.setPrettyPrinting();
		Gson gson = gsonBuilder.create();
		System.out.println(gson.toJson(huam));
	}

可以看到,这段代码与之前相比,创建了一个GsonBuilder对象,然后调用了一个.setPrettyPrinting()方法,而且Gson对象不是new出来的了,而是用GsonBuilder来create出来的,我们来看一下输出在这里插入图片描述
有没有发现,和上面那个输出有明显的区别把,易读性大大提高啊!!有没有!!!

我们还可以用GsonBuilder 做更多的事情,比如`gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {

		public String translateName(Field arg0) {
			// TODO Auto-generated method stub
			if (arg0.getName().equals("name")) {
				return "NAME";					
			}
			return arg0.getName();
		}
	});`

调用这个函数,来做一些额外的策略,比如这个就是将小写的name,转换为大写的NAME.在这里插入图片描述

这里还要介绍一个关键字:transient。
这个关键字修饰的属性,在Gson数据的生成过程中,会忽略掉这个属性
具体实现同学们自己试试吧

关于Gson 的解析,调用gson.fromJson()方法在这里插入图片描述
第一个参数读取文件所获取的内容,也就是要解析的数据,第二个参数是你要解析成什么样的格式

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
Human human = gson.fromJson(content, Human.class);
System.out.println(human);

其实,gson里的数组和Java中的集合类可以进行无缝的对接,因为通常实际开发中,常用集合类来代替数组,因为集合类比数组拥有更多的特性从而满足不同的应用
下面就来介绍一个例子

我们把前面Human类中major数组改为最常见的List集合类,相应的get,set,toString方法也要变在这里插入图片描述
然后打印major在这里插入图片描述
在这里插入图片描述
可以看出,在使用Gson中,所有的集合类和Java中的数组其实是可以一一对应的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值