JSON简单介绍

一、概述

        JSON(JavaScript Object Notation),一种轻量级的数据交换格式,尤其是作为前后端数据传输的标准格式,易于阅读和编写,独立于编程语言,使得JSON在Web开发中非常流行,。

        在Java中,JSON广泛用于网络通信、配置文件、数据存储等场景。开发者通常会使用第三方库来解析和生成JSON数据。

        JSON官网:JSON

二、JSON格式支持的两种结构

        1.名称/值对集合(对象)(其实就是键值对

        JSON中,名称/值对集合被表示为一组由花括号 {} 包围的键值对。每个键值对由一个键(名称)和一个值组成。

        键必须是字符串,并且用双引号包围,

        值可以是字符串、数字、布尔值、数组、对象或者null。

        键和值之间用冒号 : 分隔,而键值对之间用逗号 , 分隔。

json对象例子:

{
  "name": "宝宝",
  "age": 18,
  "isStudent": true,
  "height": null,
  "contact": {
    "email": "zhangsan@example.com",
    "phone": "123-456-7890"
  },
  "hobbies": ["阅读", "旅游", "摄影"]
}

2.字符串格式

       整个JSON数据结构被序列化为一个字符串。通常是在数据需要通过网络传输或存储到文本文件中时的格式。在JSON字符串中,特殊字符比如双引号必须被转义。

 String jsonString = "{\n" +
                "  \"name\": \"宝宝\",\n" +
                "  \"age\": 18,\n" +
                "  \"isStudent\": true,\n" +
                "  \"height\": null,\n" +
                "  \"contact\": {\n" +
                "    \"email\": \"zhangsan@example.com\",\n" +
                "    \"phone\": \"123-456-7890\"\n" +
                "  },\n" +
                "  \"hobbies\": [\"阅读\", \"旅游\", \"摄影\"]\n" +
                "}";

3.有序的值列表(数组)

        JSON数组是由方括号 [] 包围的值的有序集合。

        数组中的值可以是任何类型,包括字符串、数字、布尔值、数组、对象或null。

        数组中的值用逗号 , 分隔。

json数组例子

[
  {
    "title": "发光发热",
    "author": {
      "firstName": "图图",
      "lastName": ""
    },
    "published": true,
    "publishDate": "2013-12-01",
    "genres": ["技术", "编程", "Web开发"],
    "ratings": [
      {"user": "Alice", "score": 5},
      {"user": "Bob", "score": 4},
      {"user": "Carol", "score": 4.5}
    ]
  },
  {
    "title": "JavaScript高级程序设计",
    "author": {
      "firstName": "Nicholas",
      "lastName": "Zakas"
    },
    "published": true,
    "publishDate": "2020-09-23",
    "genres": ["技术", "编程", "前端开发"],
    "ratings": [
      {"user": "Dave", "score": 5},
      {"user": "Eve", "score": 4.8}
    ]
  },
  {
    "title": "未来简史",
    "author": {
      "firstName": "尤瓦尔",
      "lastName": "赫拉利"
    },
    "published": true,
    "publishDate": "2017-02-21",
    "genres": ["历史", "科学", "哲学"],
    "ratings": [
      {"user": "Frank", "score": 4.7},
      {"user": "Grace", "score": 4.9},
      {"user": "Heidi", "score": 4.6}
    ]
  }
]


三、JSON序列化

        JSON序列化是一个将数据结构或对象状态转换为JSON格式字符串的过程。

        JSON序列化的结果是一个字符串

四、JSON反序列化

        JSON反序列化是一个将JSON格式的字符串转换回原始的数据结构或对象的过程。

五、JSON常用方法

        Java中,处理JSON数据通常需要使用第三方库,因为Java标准库本身并不直接支持JSON。

     1.Jackson是一个高性能的JSON处理库,主要通过ObjectMapper类来实现序列化和反序列化。常用方法:

        writeValueAsString(Object value): 将Java对象序列化为JSON字符串。                            readValue(String content, Class<T> valueType): 将JSON字符串反序列化为Java对象。

        readValue(File src, Class<T> valueType): 从文件中读取JSON字符串并反序列化为Java对象。

        writeValue(File resultFile, Object value): 将Java对象序列化为JSON字符串并保存到文件。

  2.Fastjson是阿里巴巴的一个开源JSON库,以高性能和易用性著称,常用方法:

        JSON.toJSONString(Object object): 将Java对象序列化为JSON字符串。

        JSON.parseObject(String text, Class<T> clazz): 将JSON字符串反序列化为Java对象。

        JSON.parseArray(String text, Class<T> clazz): 将JSON字符串反序列化为特定类型的对象列表。

        JSON.parse(String text): 将JSON字符串反序列化为一个JSON对象或JSONArray,但不指定具体的类型。

六、常用JSON库

        Java中,JSON序列化可以通过各种库来实现,比如Jackson、Gson、Fastjson等

        1.使用Jackson库

                1.1添加依赖

        添加Jackson库到项目中,如果使用Maven,在pom.xml文件中添加依赖

<dependencies>
    <!-- 添加Jackson的jackson-databind依赖 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.0</version> <!-- 使用最新的稳定版本号 -->
    </dependency>
</dependencies>

                1.2JSON序列化

import com.fasterxml.jackson.databind.ObjectMapper;

// 假设我们有一个简单的Java对象
class Person {
    private String name;
    private int age;

    // 构造函数、getter和setter省略
}

public class JsonSerializationExample {
    public static void main(String[] args) {
        // 创建一个Person对象
        Person person = new Person();
        person.setName("Alice");
        person.setAge(25);

        try {
            // 创建ObjectMapper实例
            ObjectMapper mapper = new ObjectMapper();
            // 将person对象转换为JSON字符串
            String jsonString = mapper.writeValueAsString(person);
            // 输出JSON字符串 
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}




                1.3JSON反序列化

import com.fasterxml.jackson.databind.ObjectMapper;

// 假设我们有一个与JSON数据对应的Java类
class Person {
    private String name;
    private int age;
    private String email;

    // 构造函数、getter和setter省略
}

public class JsonDeserializationExample {
    public static void main(String[] args) {
        // JSON字符串
        String jsonString = "{\"name\":\"张三\",\"age\":30,\"email\":\"zhangsan@example.com\"}";

        try {
            // 创建ObjectMapper实例
            ObjectMapper mapper = new ObjectMapper();
            // 将JSON字符串转换为Person对象
            Person person = mapper.readValue(jsonString, Person.class);
            // 输出转换后的对象
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
            System.out.println("Email: " + person.getEmail());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

        2.使用Fastjson库(常用)

                2.1添加依赖

        添加Fastjson库到项目中,如果使用Maven,在pom.xml文件中添加以下依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.78</version> <!-- 可以使用最新的版本号 -->
</dependency>

                2.2JSON序列化

public class Person {
    private String name;
    private int age;
    private String email;

    // 构造函数、getter和setter方法
    public Person() {}

    public Person(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    // getter 和 setter 方法
    // ...
}

import com.alibaba.fastjson.JSON;

public class FastjsonSerializationExample {
    public static void main(String[] args) {
        // 创建Person对象
        Person person = new Person("张三", 30, "zhangsan@example.com");
        
        // 使用Fastjson的JSON类的toJSONString方法将Person对象序列化成JSON字符串
        String jsonString = JSON.toJSONString(person);
        
        // 输出JSON字符串
        System.out.println(jsonString);
    }
}

        2.3JSON反序列化

import com.alibaba.fastjson.JSON;

public class FastjsonDeserializationExample {
    public static void main(String[] args) {
        // JSON字符串
        String jsonString = "{\"name\":\"张三\",\"age\":30,\"email\":\"zhangsan@example.com\"}";
        
        // 使用Fastjson的JSON类的parseObject方法将JSON字符串反序列化成Person对象
        Person person = JSON.parseObject(jsonString, Person.class);
        
        // 输出反序列化后的对象信息
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
        System.out.println("Email: " + person.getEmail());
    }
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值