当前位置: 首页 > news >正文

Jackson - JsonGenerator创建JSON、JsonParser解析JSON

以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。

依赖项

首先,在pom.xml文件中添加以下依赖项以引入Jackson库:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version>
</dependency>

这将自动引入以下库到您的项目中:

  • jackson-annotations-2.9.8.jar
  • jackson-core-2.9.8.jar
  • jackson-databind-2.9.8.jar

始终建议使用Maven中央仓库中的最新版本。

使用JsonGenerator写入JSON内容

步骤:

  1. 创建JsonFactory实例。
  2. 使用JsonFactory创建JsonGenerator
  3. 使用JsonGenerator的方法构建JSON结构。
  4. 关闭JsonGenerator

示例代码:

package net.javaguides.jackson;import java.io.File;
import java.io.IOException;import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;/*** 使用JsonGenerator写入JSON到文件* @author Ramesh Fadatare*/
public class WriteJsonUsingJsonGenerator {public static void main(String[] args) throws IOException {JsonFactory factory = new JsonFactory();// 创建JsonGeneratorJsonGenerator generator = factory.createGenerator(new File("post.json"), JsonEncoding.UTF8);// 开始JSON对象generator.writeStartObject(); // 开始 { // 添加字符串字段generator.writeNumberField("id", 100);generator.writeStringField("title", "Jackson JSON API Guide");generator.writeStringField("description", "Post about Jackson JSON API");generator.writeStringField("content", "HTML content here");// 创建数组generator.writeFieldName("tags");generator.writeStartArray(); // 开始 [// 第一个标签对象generator.writeStartObject();generator.writeNumberField("id", 1);generator.writeStringField("name", "JSON");generator.writeEndObject();// 第二个标签对象generator.writeStartObject();generator.writeNumberField("id", 2);generator.writeStringField("name", "Java");generator.writeEndObject();// 第三个标签对象generator.writeStartObject();generator.writeNumberField("id", 3);generator.writeStringField("name", "Jackson");generator.writeEndObject();generator.writeEndArray(); // 结束 ]generator.writeEndObject(); // 结束 }// 关闭JSON生成器generator.close();}
}

运行上述程序后,会在post.json文件中写入如下JSON内容:

{"id" : 100,"title" : "Jackson JSON API Guide","description" : "Post about Jackson JSON API","content" : "HTML content here","tags" : [ { "id" : 1, "name" : "JSON" }, { "id" : 2, "name" : "Java" }, { "id" : 3, "name" : "Jackson" } ]
}

使用JsonParser读取JSON内容

在本例中,我们将从外部文件post.json(在之前的例子中我们已经写入了JSON内容)读取JSON内容。

步骤:

  1. 创建JsonParser使用JsonFactory.createJsonParser()方法。
  2. 使用nextToken()方法遍历每个JSON字符串作为token。
  3. 检查每个token并相应处理。

示例代码:

package net.javaguides.jackson;import java.io.File;
import java.io.IOException;import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;/*** 使用JsonParser从文件读取JSON* @author Ramesh Fadatare*/
public class ReadJsonUsingJsonParser {public static void main(String[] args) throws IOException {JsonFactory factory = new JsonFactory();// 创建File对象File file = new File("post.json");// 创建JsonParserJsonParser parser = factory.createParser(file);// 读取第一个对象即 {JsonToken token = parser.nextToken();// 读取JSON对象while (parser.nextToken() != null) {if (token == JsonToken.FIELD_NAME) {String fieldName = parser.getCurrentName();token = parser.nextToken(); // 移动到值switch (fieldName) {case "id":System.out.println("ID: " + parser.getIntValue());break;case "title":System.out.println("Title: " + parser.getText());break;case "description":System.out.println("Description: " + parser.getText());break;case "content":System.out.println("Content: " + parser.getText());break;case "tags":System.out.println("Tags are - ");while (parser.nextToken() != JsonToken.END_ARRAY) { // 遍历数组直到 ]if (parser.getCurrentToken() == JsonToken.START_OBJECT) {while (parser.nextToken() != JsonToken.END_OBJECT) {if ("id".equals(parser.getCurrentName())) {parser.nextToken();System.out.print("ID: " + parser.getIntValue() + ", ");} else if ("name".equals(parser.getCurrentName())) {parser.nextToken();System.out.println("Name: " + parser.getText());}}}}break;}}}parser.close();}
}

输出:

ID: 100
Title: Jackson JSON API Guide
Description: Post about Jackson JSON API
Content: HTML content here
Tags are - 
ID: 1, Name: JSON
ID: 2, Name: Java
ID: 3, Name: Jackson

总结

以上代码展示了如何使用JsonGenerator创建复杂的JSON结构,并且使用JsonParser解析这些结构。

通过这种方式,您可以灵活地生成和解析JSON数据,这对于与Web服务交互或处理配置文件非常有用。

相关文章:

Jackson - JsonGenerator创建JSON、JsonParser解析JSON

以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先&#xff0c;在pom.xml文件中添加以下依赖项以引入Jackson库&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupI…...

Linux-音频应用编程

ALPHA I.MX6U 开发板支持音频&#xff0c;板上搭载了音频编解码芯片 WM8960&#xff0c;支持播放以及录音功能&#xff01;本章我们来学习 Linux 下的音频应用编程&#xff0c;音频应用编程相比于前面几个章节所介绍的内容、其难度有所上升&#xff0c;但是笔者仅向大家介绍 Li…...

《QT 示例宝库:探索丰富的编程世界》

《QT 示例宝库&#xff1a;探索丰富的编程世界》 一、QT 基础示例&#xff08;一&#xff09;QRadioButton 示例&#xff08;二&#xff09;拦截关闭事件示例 二、QT 常用代码示例&#xff08;一&#xff09;QObject 相关操作&#xff08;二&#xff09;Qt 基本容器遍历&#x…...

腾讯云流式湖仓统一存储实践

点击蓝字⬆ 关注我们 本文共计5107 预计阅读时长16分钟 &#xff0a; 本文将分享腾讯云流式湖仓的架构与实践。主要内容包括&#xff1a; 流计算Oceanus介绍腾讯云流式湖仓架构腾讯云流式湖仓实践腾讯云流式湖仓发展规划 一、流计算Oceanus介绍 随着大数据技术的发展&#xff0…...

18 设计模式之迭代器模式(书籍遍历案例)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;允许客户端通过统一的接口顺序访问一个集合对象中的元素&#xff0c;而无需暴露集合对象的内部实现。这个模式主要用于访问聚合对象&#xff08;如集合、数组等&…...

超清4K视频素材哪里找?优质下载资源网站分享

我是你们的自媒体UP主小李。现在是高清、4K视频大行其道的时代&#xff0c;想要制作出吸引眼球的优质内容&#xff0c;超清4K视频素材必不可少。今天就为大家分享几个宝藏网站&#xff0c;让你的视频创作更轻松、更出彩&#xff01; 蛙学网 首先推荐 蛙学网&#xff0c;这是国内…...

刷题日志【1】

目录 1.全排列【力扣】 代码1&#xff1a; 代码2&#xff1a; 2、子集【力扣】 3、全排列Ⅱ【力扣】 4、组合【力扣】 1.全排列【力扣】 代码1&#xff1a; class Solution {bool check[7];vector <int> path;vector<vector<int>> ret;public:vecto…...

【C++算法】32.前缀和_矩阵区域和

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 1314. 矩阵区域和 题目描述&#xff1a; 解法 防止有人看不明白题目&#xff0c;先解释一下题目 二维前缀和思想&#xff1a; 使用前缀和矩阵 ret [x1,y1]~[x2,y2] D …...

使用堆栈(Stack)

集合类型&#xff08;Collection)下篇_xml collection-CSDN博客 以上是堆栈的简单介绍&#xff0c;下方是堆栈的使用 题目&#xff1a;给定一个逆波兰表达式&#xff08;后缀表达式&#xff09;的字符串数组tokens&#xff0c;其中每个元素是一个操作数&#xff08;数字&…...

雨晨 2610(2)0.2510 Windows 11 24H2 Iot 企业版 LTSC 2024 极简 2in1

文件: 雨晨 2610(2)0.2510 Windows 11 24H2 Iot 企业版 LTSC 2024 极简 2in1 install.esd 索引: 1 名称: Windows 11 IoT 企业版 LTSC 极简 26100.2510 描述: Windows 11 IoT 企业版 LTSC 极简 26100.2510 By YCDISM RTM 2025 24-12-07 大小: 8,176,452,990 个字节 索引: 2 …...

HDD 2025年技术趋势深度分析报告

随着数据量的指数级增长以及人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;、云计算和视频监控等领域的需求激增&#xff0c;硬盘驱动器&#xff08;HDD&#xff09;行业正面临着前所未有的挑战与机遇。本报告旨在深入剖析2025年HDD技术的发展方向&am…...

算法-字符串-22.括号生成

一、题目 二、思路解析 1.思路&#xff1a; 生成所有可能并且有效的括号组合——回溯方法 2.常用方法&#xff1a; a.数组&#xff0c;因为需要增删元素&#xff0c;所以选择LinkedList LinkedList<String> resnew LinkedList<>(); b.StringBuilder创建&#xff0…...

Free-RTOS实现LED闪烁

开发板&#xff1a;正点原子探索者 F407 LED定时定时闪烁 本次实验验证&#xff1a; 配置文件 1、打开CubeMX 2、选择芯片型号&#xff0c;然后点击开始项目 3、配置时钟 配置烧录引脚&#xff0c;与FreeRTOS系统时钟 选择FreeRTOS 这里已经默认有一个任务&#xff…...

NLP论文速读(斯坦福大学)|使用Tree将语法隐藏到Transformer语言模型中正则化

论文速读|Sneaking Syntax into Transformer Language Models with Tree Regularization 论文信息&#xff1a; 简介&#xff1a; 本文的背景是基于人类语言理解的组合性特征&#xff0c;即语言处理本质上是层次化的&#xff1a;语法规则将词级别的意义组合成更大的成分的意义&…...

再谈多重签名与 MPC

目录 什么是 MPC 钱包以及它们是如何出现的 多重签名和智能合约钱包已经成熟 超越 MPC 钱包 关于小队 多重签名已经成为加密货币领域的一部分&#xff0c;但近年来&#xff0c;随着 MPC&#xff08;多方计算&#xff09;钱包的出现&#xff0c;多重签名似乎被掩盖了。MPC 钱包之…...

CTF学习24.11.19[音频隐写]

MISC07[音频隐写] 隐写术 隐写术是一门关于信息隐藏的技巧与科学&#xff0c;所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography&#xff0c;来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganograp…...

vue的watch是否可以取消? 怎么取消?

发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 Vue 可以通过 watch API 返回的一个 取消函数&#xff0c;可以在需要时取消该监听。 如何取消 watch&#xff1f; 当你使用 Vu…...

23、枚举

1、枚举 罗列一些标识符&#xff0c;当做整型数据使用。为了代码的易读性 1.1、枚举定义 enum 枚举名{大写标识符,大写标识符....}; 枚举类型名&#xff1a;enum 枚举名 枚举里面如果不给标识符赋值&#xff0c;默认从0开始&#xff0c;依次增1 如果里面的标识符有赋值…...

Java基本概念

Java特点 简单性。容易使用&#xff0c;比如没有C复杂的指针 面向对象。将对象属性剥离&#xff0c;当属性需要大量调用时节省代码&#xff0c;比如把大象装进冰箱&#xff0c;JAVA将大象分成跑、睡觉等不同功能&#xff0c;当需要就调用 分布式。 健壮性 安全性 体系结构…...

C++学习——如何析构派生类

C——继承关系中的虚函数 析构派生类纯虚构函数和抽象类 析构派生类 先看一段简单的代码&#xff1a; #include <iostream>using namespace std;class AA { public:AA() {cout << "调用了基类构造" << endl;}virtual void func() {cout <<…...

【MATLAB】基于MATLAB的图像加密传输平台【GUI+源码+项目说明】

【MATLAB】基于MATLAB的图像加密传输平台【GUI源码项目说明】 一、项目介绍 数字图像具有数据量大、像素间相关性强、视觉冗余度高的特点, 传统的字节级加密 (如 AES) 直接作用于图像比特流虽能保密, 但无法破坏图像在空间域的统计特征. 本项目采用 “Arnold 置乱 明文相关 Lo…...

Java应用性能监控利器zorka:嵌入式APM的深度定制与实战

1. 项目概述&#xff1a;一个被低估的Java应用性能监控利器如果你是一名Java后端开发者或系统运维&#xff0c;肯定对应用性能监控&#xff08;APM&#xff09;不陌生。市面上有New Relic、Dynatrace这样的商业巨兽&#xff0c;也有Pinpoint、SkyWalking这类开源明星。但今天我…...

在Windows上直接安装APK的完整指南:告别模拟器时代

在Windows上直接安装APK的完整指南&#xff1a;告别模拟器时代 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过&#xff0c;在Windows电脑上直接运行Andro…...

别再写一堆CASE WHEN了!PostgreSQL里COALESCE和NULLIF这两个函数,帮你把SQL写得又短又稳

告别冗长SQL&#xff1a;用PostgreSQL的COALESCE和NULLIF重构条件逻辑 在数据处理的世界里&#xff0c;SQL就像是我们与数据库对话的语言。但你是否经常遇到这样的情况&#xff1a;为了处理各种空值和边界条件&#xff0c;你的SQL查询变成了一个由无数CASE WHEN语句组成的庞然大…...

一键封装成EXE!让Windows命令行像Linux一样直接敲‘binwalk’的懒人方案

一键封装成EXE&#xff01;让Windows命令行像Linux一样直接敲‘binwalk’的懒人方案 每次打开命令行都要先cd到Python的Scripts目录才能使用binwalk&#xff0c;这种操作对于效率至上的开发者来说简直是时间杀手。本文将带你用PyInstaller打造一个开箱即用的binwalk.exe&#…...

从蓝牙4.2到5.4:广播包格式的‘进化史’与向后兼容那些坑

蓝牙广播协议演进史&#xff1a;从4.2到5.4的兼容性实战指南 当你的智能手表突然无法被旧款手机发现&#xff0c;或者工业传感器在新版本固件下出现广播丢包——这些看似简单的连接问题背后&#xff0c;往往隐藏着蓝牙协议版本迭代带来的兼容性暗礁。作为无线通信领域的"毛…...

终极指南:5步快速掌握Aimmy免费AI瞄准辅助工具

终极指南&#xff1a;5步快速掌握Aimmy免费AI瞄准辅助工具 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai/Aimmy 还在为游戏中的瞄…...

CoaXPress 2.0多输入高速图像采集卡:应对机器视觉数据洪流的架构核心

1. 项目概述&#xff1a;当视觉系统遇上数据洪流在工业检测、半导体AOI、生命科学成像这些对速度和精度要求近乎苛刻的领域&#xff0c;图像采集卡扮演着“数据咽喉”的角色。它决定了视觉系统能从相机“吞下”多少数据&#xff0c;以及“消化”的速度有多快。最近&#xff0c;…...

独立开发者如何借助Taotoken多模型能力打造全能AI助手应用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken多模型能力打造全能AI助手应用 对于独立开发者或小型工作室而言&#xff0c;构建一个功能全面的AI助手…...

Grad-CAM实战:用热力图透视神经网络的决策焦点

1. Grad-CAM技术初探&#xff1a;为什么我们需要热力图&#xff1f; 当你训练了一个图像分类模型&#xff0c;准确率高达95%&#xff0c;但你真的了解它是如何做出判断的吗&#xff1f;我曾在项目中遇到过这样的尴尬&#xff1a;模型把一只坐在草地上的哈士奇误判为"狼&qu…...