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);
我们把前面Human类中major数组改为最常见的List集合类,相应的get,set,toString方法也要变
然后打印major

可以看出,在使用Gson中,所有的集合类和Java中的数组其实是可以一一对应的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/34012.html