周末整理学习成果,深入探究JSON数据结构与值格式

周末整理学习成果,深入探究JSON数据结构与值格式

[id_2054247314]

很多人心里都会有回答,有一种数据交换格式,这是没毛病的。JSON 就是一种轻量级的数据交换格式,并且它与开发语言无关。

JSON的数据结构呢?

一个对象具有一系列非排序的键/值对,它以 {开始,以 }结束。每个键/值对由 : 进行分区,多个键值对通过, 进行分割。要注意的是,JSON 的键是一个 String 类型的字符串。

[id_962242752]

值可以是用双引号括起来的字符串;值可以是数值;值可以是 true;值可以是 false;值可以是 null;值可以是对象;值可以是数组。并且这些结构能够相互嵌套使用。

JSON在java中的使用

简要阐述了 JSON 的概述,接着呈现这篇文章的重点:在 Java 中对 JSON 的使用。

在 Java 中,它本身并未内置 JSON 的解析功能。所以,要使用 JSON 的话,就必须借助第三方类库。经过归纳总结,总共存在 4 种方式。接下来,将围绕每种方式的生成和解析这两个方面进行详细的阐述。

1.JSON官方

2.GSON:谷歌开发的 JSON 库,功能十分全面。

FastJSON 是由阿里巴巴开发的 JSON 库,它的性能非常优秀。

4.Jaskon:社区十分活跃且更新速度很快。

[id_1247749100]

官方提供的 JSON 具有通用性。不过在解析的时候会有点费事。反正我不会使用它,哈哈。

maven依赖:


    org.json
    json
    20180130

生成JSON对象

1.使用JSONObject添加对象

代码:

 @Test
    public void Test3(){
    	//创建JSON对象
        JSONObject jsonObject = new JSONObject();
        Object obj = null;
        //像JSON对象中添加数据
        jsonObject.put("name", "张三");
        jsonObject.put("age", 20);
        jsonObject.put("birth", "1998-01-01");
        jsonObject.put("haveCar", obj);
        jsonObject.put("hasGirlfriend", true);
        jsonObject.put("likes", new String[]{"看电影", "看书"});
		//将JSON对象以字符串的形式打印
        System.out.println(jsonObject.toString());
    }

结果:

在进行字符串输出时会察觉到,输出的字符串和数据存储的顺序或许是不相同的。这是因为在调用 jsonObject.put()方法时,其内部是一个 HashMap,数据被存入了 HashMap 中。由于 HashMap 是依据键的哈希码来确定键的位置的,所以就可能会出现上述的问题。

因为 jsonObject.put()方法的底层是对 HashMap 的操作,所以想知道能否把一个 HashMap 转换成 JSON 数据呢?答案是可以的。其原因是 JSONObject 类提供了一个构造函数,而这个构造函数所接收的正是一个 Map。

2.javaBean转JSON

javaBean:

public class User {
    private String name;
    private int age;
    private String[] likes;
    // 省略 get 与 set 方法
}

JavaBean TO JSON:

    public static void beanToJsonTest() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setLikes(new String[]{"看电影", "看书"});
        JSONObject jsonObject = new JSONObject(user);
        System.out.println(jsonObject.toString());
    }

解析JSON

有两张表,一张是学生表,另一张是年级表。年纪与学生呈一对多的关系。在此我不展示表了,因为它们太简单了。直接给出解析代码:(务必查看注释哦!)

//JSON字符串
String json = 一个字典,其中键为'id',值为 1,键为'name',值为'JAVAEE-1703',还有一个键为'stus',值为一个列表。这个列表中包含两个字典,第一个字典的键为'id',值为 101,键为'name',值为'刘一',键为'age',值为 16;第二个字典的键为'id',值为 102,键为'name',值为'刘二',键为'age',值为 23。;
//将JSON字符串转为JSON对象
JSONObject jsonObject = JSONObject.fromObject(json);
//创建年级对象,然后进行解析JSON,并赋值
Grade grade = new Grade();
grade.setId(jsonObject.getInt("id"));
grade.setName(jsonObject.getString("name"));
//创建一个集合用来存储学生对象
ArrayList<Student> students = new ArrayList<>();
JSONArray stus = jsonObject.getJSONArray("stus");
//遍历JSONArray对象,解析后放入集合中
for (Object o : stus) {
    JSONObject jsonObject1 = JSONObject.fromObject(o);
    Student student = new Student(jsonObject1.getInt("id"),jsonObject1.getString("name"), jsonObject1.getInt("age"));
    students.add(student);
    }
grade.setStus(students) ;   
//至此一个JSON字符串解析为Java对象

2.使用GSON

依赖

        
            com.google.code.gson
            gson
            2.8.2
        

生成JSON对象:

    public static void beanToJsonTest() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setLike(new String[]{"看电影", "看书"});
        /**
使用 GsonBuilder 能够进行一些额外的处理,例如实现格式化输出以及进行预处理等。
        * 
创建一个 GsonBuilder 实例,名为 gsonBuilder,即 new GsonBuilder() 并赋值给 gsonBuilder 。
gsonBuilder 设定了美化打印的功能。
Gson 被创建,创建者是 gsonBuilder,创建后的结果赋值给 gson 。
        */
        Gson gson = new Gson();
        System.out.println(gson.toJson(user));
    }

解析JSON

public static void jsonToBeanTest() {
        String jsonStr = 此人名为李四,年龄 22 岁,爱好有看电影和看书,出生于 1996 年 1 月 1 日。;
        GsonBuilder gsonBuilder = new GsonBuilder();
        // 设置日期转换格式
        gsonBuilder.setDateFormat("yyyy-MM--dd");   
        Gson gson = gsonBuilder.create();
        待解析的字符串为第一个参数,第二个参数是结果数据类型的 Class 对象。
        User user = gson.fromJson(jsonStr, User.class);
    }

不用get取值,set赋值了,看起来好爽啊。有没有?

 String json2 = 杭州;
 //解析数组要求使用Type
 ArrayList<String> list=gson.fromJson(json2, new TypeToken<ArrayList<String>>(){}.getType());
 System.out.println(list);

3.使用FastJSON

FastJSON 是阿里巴巴的产品,它的效率极高,深受广大程序员的喜爱。不过在此我仅写下上述的常见内容,即生成和解析方面。若想更多地了解它,可以去查看这个 FastJSON,它非常棒。

依赖


    com.alibaba
    fastjson
    1.2.47

生成JSON对象:

创建 JSON 对象很简单,只需运用 JSONObject(fastJson 所提供的用于表示 JSON 的对象)以及 JSONArray(fastJson 提供的用于表示 JSON 数组的对象)。

@Test
public void 在生成 JSON 时与生成正确内容进行比较。() throws ParseException {
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < 2; i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE", 10);
        jsonObject.put("FULL NAME", "Doe " + i);
        jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
        jsonArray.add(jsonObject);
    }
    String jsonOutput = jsonArray.toJSONString();
}

解析JSON

@Test
public void 当进行 Json 操作时,如果 Json 与要转换为的对象不匹配,就需要进行正确的转换。() {
    Person person = new Person(20, "John", "Doe", new Date());
    String jsonObject = JSON.toJSONString(person);
    Person newPerson = JSON.parseObject(jsonObject, Person.class);

JSON 对象与字符串的相互转化

最常用的就是这个直接转化了,来吧:

//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);

4.使用JackSon

jackSon 对 JSON 进行解析,而 SpringMVC 内置的解析器就是这个。

依赖


    com.fasterxml.jackson.core
    jackson-databind
    2.9.8

生成JSON字符串

ArrayList<Student> students = new ArrayList<>();
for (int i = 0; i < 3; i++) {
     students.add(new Student(100 + i, "二稿" + i, 1000 + i));
}
Grade grade = new Grade(22, "语文", students);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(grade);
System.out.println(s);

解析JSON字符串

// 对象嵌套数组嵌套对象
String json1 = 这个 JSON 数据包含一个 id 为 1 且 name 为"JAVAEE-1703"的对象,以及该对象下的一个 stu 数组,数组中包含一个 id 为 101 且 name 为"刘一"、age 为 16 的元素。;
// 数组
String json2 = "[\"北京\",\"天津\",\"杭州\"]";
ObjectMapper mapper = new ObjectMapper();
Grade grade = mapper.readValue(json1, Grade.class);
System.out.println(grade);
List<String> list = mapper.readValue(json2, newTypeReference<List<String>>() {});
System.out.println(list);

如果你不知道JSON对象是啥玩意:

看这篇文章啦:JsonElement简单说明

一口气整理完后,感觉非常累呢。倘若你觉得本文对你有所帮助,那就给萧然点个赞来鼓励一下吧,嘿嘿。接下来,要感谢以下文章的博主,并附上链接:

1.

2.

3.还有菜鸟教程:

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读