首页 > 编程语言 >Java 操作 JSON 数据(6)--JSON-Java 操作 JSON 数据

Java 操作 JSON 数据(6)--JSON-Java 操作 JSON 数据

时间:2023-01-01 18:45:31浏览次数:30  
标签:Java -- jsonObject json JSON JSONObject import

JSON-Java 包是一个将 Java 对象和 JSON 文件相互转换的参考实现,演示了如何将 JSON 文档解析为Java对象,以及如何从 Java 对象生成 JSON 文档。本文介绍下 JSON-Java 的基本使用方法;文中所使用到的软件版本:Java 1.8.0_321、org.json.json 20220924。

1、JSON-Java 特点

  • 可靠且一致的结果
  • 遵守 JSON 规范
  • 易于构建、使用并可方便的引入到其他项目中
  • 不需要外部的依赖
  • 快速执行及低内存占用
  • 保持向后兼容性
  • 可在 Java 1.6 - 1.11 上使用

2、注解

JSON-Java 包目前提供了两个注解用于处理 Java 对象的序列化。

注解 作用域 说明 生效时机
@JSONPropertyIgnore
gette方法上 忽略该注解标注的属性 序列化时
@JSONPropertyName
gette方法上 指定属性对应 JSON 映射的名称 序列化时

3、具体使用

3.1、引入依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20220924</version>
</dependency>

3.2、定义实体类

package com.abc.demo.json.jsonjava;

import lombok.Setter;
import lombok.ToString;
import org.json.JSONPropertyIgnore;
import org.json.JSONPropertyName;

import java.time.LocalDateTime;
import java.util.List;

@ToString
@Setter
public class Student {
    private Long id;

    private LocalDateTime createTime;

    private String name;

    private List<String> homeAddress;

    public Long getId() {
        return id;
    }

    @JSONPropertyIgnore
    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public String getName() {
        return name;
    }

    @JSONPropertyName("addresses")
    public List<String> getHomeAddress() {
        return homeAddress;
    }
}

3.3、序列化及反序列化

package com.abc.demo.json.jsonjava;

import org.json.*;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class JSONJavaCase {
    private static final Logger logger = LoggerFactory.getLogger(JSONJavaCase.class);

    /**
     * 序列化
     */
    @Test
    public void serialize() {
        //使用JSONObject存储数据
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", 1);
        jsonObject.put("createTime", LocalDateTime.now());
        jsonObject.put("name", "小明");
        jsonObject.put("homeAddress", Arrays.asList("江苏", "上海"));
        //调用toString方法即可转为json字符串
        logger.info(jsonObject.toString());

        Student student = new Student();
        student.setId(1L);
        student.setCreateTime(LocalDateTime.now());
        student.setName("小明");
        student.setHomeAddress(Arrays.asList("江苏", "上海"));
        //普通java对象转JSONObject
        jsonObject = new JSONObject(student);
        logger.info(jsonObject.toString());

        List<Student> list = new ArrayList<>();
        list.add(student);
        //list转JSONArray
        JSONArray jsonArray = new JSONArray(list);
        logger.info(jsonArray.toString());
    }

    /**
     * 反序列化
     */
    @Test
    public void deserialize() {
        String s = "{\"addresses\":[\"江苏\",\"上海\"],\"name\":\"小明\",\"id\":1}";
        JSONTokener jsonTokener = new JSONTokener(s);
        //JSON-Java 不能从json字符串直接转成java对象,需先转成JSONObject,然后通过JSONObject的api获取数据
        JSONObject jsonObject = new JSONObject(jsonTokener);
        logger.info(jsonObject.getInt("id") + "");
        logger.info(jsonObject.getString("name"));
        logger.info(jsonObject.getJSONArray("addresses").toString());
    }
}

 

标签:Java,--,jsonObject,json,JSON,JSONObject,import
From: https://www.cnblogs.com/wuyongyin/p/16895072.html

相关文章

  • 内存条如何选择
     1、打开任务管理器,点到内存那一页,需要关注的有速度和插槽数量;插槽数量为2的话,可以去百度下双通道内存,道道很多的,多了解下再买。2、这个内存速度需要匹配CPU以及主板......
  • 2023一个小目标:每天写50行代码
    写在前面:今天是2023年1月1日,现在时间18:16,苦于自己写代码的水平有限,之前一直在学习,但效果甚微,后来反思一下,大概原因有两个,第一,没有持续学习,间断的学习,效果不好,有时候......
  • 202209-2 何以包邮?
    题意:输入第一行为n,x两个正整数。分别表示n本书和可以包邮的价格下限x。随后n行表示第i本书的价格。现在要求出在所有大于x的价格中,最小的那个。这里的价格是指任意买m(m......
  • 计算机网络个人学习经验
    目录学好这门课的必要性重要的专业基础各种考试很爱考课程学习的需要预期的学习效果学习方法书籍推荐《计算机网络:自顶向下方法》《计算机网络》(谢希仁)《TCP/IP详解卷1......
  • 好题分享、心路历程(力扣1225)
    【题目介绍】该题为力扣1225,名为报告系统状态的连续日期。【题型分类】属于连续专题。官网标为困难题。【思路分享】这里的连续属于时间连续,采用row_number()、subd......
  • 【SpringCloud】SpringCloud简介
    SpringCloud简介​​1.认识微服务​​​​1.0.学习目标​​​​1.1.单体架构​​​​1.2.分布式架构​​​​1.3.微服务​​​​1.4.SpringCloud​​​​1.5.总结​​​​2.......
  • 云南首个非遗智慧传承空间亮相昆明南亚风情第壹城
    2022年12月31日,云南首家最大华为门店,华为智能生活馆昆明南亚风情第壹城盛大开业,匠心铸造美学,高端科技相汇,门店涵盖了3C产业、新能源汽车产业以及全屋智能产业,每个模块之间递......
  • ros2订阅esp32发布的电池电压数据-补充
    ​​ros2订阅esp32发布的电池电压数据​​电池电压数据能订阅但是不显示,数据QoS不匹配,需要修改。默认: 需要使用的是外部机器人通过wifi传递的数据,设置://createpublisher......
  • Pytorch入门实战(5):基于nn.Transformer实现机器翻译(英译汉)
    ​​使用GoogleColab运行(openInColab)​​​​源码地址​​文章目录​​本文涉及知识点​​​​本文内容​​​​环境配置​​​​数据预处理​​​​文本分词与构造词......
  • 中国各省绿色专利授权数据(1990-2022)
    中国各省绿色专利授权数据(1990-2022)中国各省绿色专利授权数据(1990-2022)中国各省绿色专利授权数据(1990-2022)最新版数据已整理为Excel格式,数据的时间区间为1990-2022年,内含“......