Jackson框架

2023-11-01

Jackson框架

一、Jackson简介

       Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。

二、Jackson使用

2.1、ObjectMapper的使用

    建立两个类Address、Employee

public class Address {
    private String street;
    private String city;
    private int zipCode;
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public int getZipCode() {
        return zipCode;
    }
    public void setZipcode(int zipcode) {
        this.zipCode = zipcode;
    }
    @Override
    public String toString(){
        return getStreet() + ", "+getCity()+", "+getZipCode();
    }
}

public class Employee {
    private int id;
    private String name;
    private int age;
    private BigDecimal salary;
    private String designation;
    private Address address;
    private long[] phoneNumbers;
    private Map<String, String> personalInformation;
    /*Getter and Setter Methods*/
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
       this.salary = salary;
    }
    public String getDesignation() {
        return designation;
    }

    public void setDesignation(String designation) {
        this.designation = designation;
    }
    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
    public long[] getPhoneNumbers() {
        return phoneNumbers;
    }

    public void setPhoneNumbers(long[] phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
    public Map<String, String> getPersonalInformation() {
        return personalInformation;
    }
    public void setPersonalInformation(Map<String, String> personalInformation) {
        this.personalInformation = personalInformation;
    }
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("ID: " + getId() + "\n");
        sb.append("Name: " + getName() + "\n");
        sb.append("Age: " + getAge() + "\n");
        sb.append("Salary: $" + getSalary() + "\n");
        sb.append("Designation: " + getDesignation() + "\n");
        sb.append("Phone Numbers: " + Arrays.toString(getPhoneNumbers()) + "\n");
        sb.append("Address: " + getAddress() + "\n");
        sb.append("Personal Information:" + getPersonalInformation() + "\n");
        return sb.toString();

    }

}

json格式的文件data.json如下:

{
  	 "id" : 123,
 	 "name" : "Henry Smith",
 	 "age" : 28,
  	 "salary" : 2000,
 	 "designation" : "Programmer",
  	 "address" : {
    	"street" : "Park Avn.",
    	"city" : "Westchester",
    	"zipcode" : 10583
 	 },
  	"phoneNumbers" : [ 654321, 222333 ],
  	"personalInformation" : {
    	"gender" : "Male",
    	"maritialstatus" : "Married"
	}
}

1、从文件中读取json或向文件中写入json

//Jackson读取json文件,将json数据转化为对象
	public void testJsonToObject() throws JsonParseException, JsonMappingException, IOException{
        ObjectMapper objectMapper = new ObjectMapper();
        Employee emp = objectMapper.readValue(new File("src/data.json"), Employee.class);
        System.out.println(emp.toString());
	}
	//Jackson将java对象转化为json字符串并输出
	public void testObjectTojson() throws JsonParseException, JsonMappingException, IOException{
        ObjectMapper objectMapper = new ObjectMapper();
        Employee emp = objectMapper.readValue(new File("src/data.json"), Employee.class);
        //将对象转化为json格式,并存入到文件中
        objectMapper.writeValue(new File("src/data1.json"), emp);
        //将对象转化为json格式数据,并输出到控制台上
        objectMapper.writeValue(System.out, emp);
        
//        StringWriter  str =new StringWriter();
//        JsonGenerator s=new JsonFactory().createGenerator(str);
//        objectMapper.writeValue(s, emp);
//        String data =new String();
//        str.write(data);
//        System.out.println(data);
	}

2、从InputStream读入或向OutPutStream写出

public void testInputStream() throws JsonParseException, JsonMappingException, IOException{
        ObjectMapper objectMapper = new ObjectMapper();
        Employee emp = objectMapper.readValue(new FileInputStream("src/data.json"), Employee.class);
        System.out.println(emp.toString());
	}
	public void testOutPutStream() throws JsonParseException, JsonMappingException, IOException{
        ObjectMapper objectMapper = new ObjectMapper();
        Employee emp = objectMapper.readValue(new File("src/data.json"), Employee.class);
        //将对象转化为json格式,并存入到文件中
        objectMapper.writeValue(new FileOutputStream("src/data1.json"), emp);

        //JsonNode node = mapper.readTree(new File("country2.json"));

       //将对象转化为json格式数据,并输出到控制台上
        objectMapper.writeValue(System.out, emp);

	}

3、从URL中读取数据(若URL返回的满足Employee类的json数据)

Employee emp1 = objectMapper.readValue("http://www.xxx.com/xxx", Employee.class);
JsonNode jsonNode = objectMapper.readTree("http://www.xxx.com/xxx");

4、常用的方法

//将user对象转化为json格式字符串
String json=mapper.writeValueAsString(user)

//将json格式的字符串转化为对象,示例如下:
Map m = mapper.readValue(json, Map.class)
Employee emp = objectMapper.readValue(new File("src/data.json"), Employee.class);


2.2、JsonGenerator

public void testJsonGenerator() throws IOException{
		URL url =new URL("http://www.xxx.com/xxx");
		URLConnection urlConnection = url.openConnection();
		urlConnection.setDoOutput(true);
		urlConnection.setDoInput(true);
		
		//产生一个JsonGenerator类
		JsonFactory jsonFactory = new JsonFactory();
		JsonGenerator jsonGenerator = jsonFactory.createGenerator(urlConnection.getOutputStream(), JsonEncoding.UTF8);
		jsonGenerator.writeString("wwwwwwwww");		
		jsonGenerator.writeStartObject();
		jsonGenerator.writeStringField("brand", "Mercedes");
		jsonGenerator.writeNumberField("doors", 5);
		jsonGenerator.writeEndObject();
		jsonGenerator.close();
	}






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson框架 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 使用Python的数据可视化库Matplotlib实现折线图

    摘要 数据可视化是数据分析和探索中不可或缺的一环 本文将介绍如何使用Python中的数据可视化库Matplotlib 通过示例代码实现一个简单的折线图 正文 一 Matplotlib简介 Matplotlib是一个功能强大的Python绘图
  • requests.exceptions.SSLError (SSL module is not available) 解决方法

    Bug requests exceptions SSLError HTTPSConnectionPool host port 443 Max retries exceeded with url Caused by SSLError Can
  • Leecode 每日一题 problem1 (03-22)

    question 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可以按任
  • C++(11):显示删除函数=delete

    C 11可以通过 delete将编译器默认生成的函数 显示的进行删除 class A public A A const A delete 将编译器默认生成的拷贝构造函数删除 int main A a1 A a2 a1 默认拷贝构造函数已被删
  • 【爷青回系列】使用VMware虚拟机安装Windows XP系统!最详细!

    目录 前言 一 安装VMware虚拟机 二 Windows XP系统镜像下载 三 创建Windows XP虚拟机 四 等待Windows XP虚拟机安装 五 创建本机与虚拟机的共享文件夹 写在最后 前言 最近 肯德基的 田园脆鸡堡 回归了
  • matlab机器人雅可比矩阵实验,机械臂通过雅可比矩阵实现正运动学及逆运动学迭代解(工具:matlab)...

    1 利用工具箱建模 供验证用 选用二轴平面机械臂 两个关节角分别是theta1和theta2 view 3 Lnk1 Link 0 0 100 0 0 theta d a alpha Lnk2 Link 0 0 200 0 0 Robot
  • Springboot+mybatis-plus 条件查询 实现用户名不重复的判断

    条件查询参考 https blog csdn net m0 37034294 article details 82917234 在注册时对用户名称进行判断 用户名称不可重复 思路 selectcount查找表中的userName字段 若查找
  • 学好kafka,轻松做架构

    去年的时候 我有几个月在给一家超级独角兽企业做顾问 跟他们其中一个核心团队的负责人沟通比较多 他们团队很年轻 技术经验不能说很充分 但发展速度太快了 几个年轻人两三年前写的东西 已经可以一年贡献几个亿的利润 从商业上来说非常成功 但技术欠债
  • 掌握Python的X篇_24_字符串对象常见方法

    文章目录 1 判断前缀后缀 2 判断是否是数字 3 将字符串分割为list 4 将list拼接为字符串 5 对齐调整 6 格式化字符串 6 1 位置占位 6 2 名称占位 1 判断前缀后缀 In 1 filename shellmad zh
  • vue项目中该如何引入自定义字体?超简单几步教你实现

    在这里斗胆说一句教你实现 其实是我的一种实现方法 觉得十分简单 很好理解 所以在这里分享给大家了 具体操作 1 在assets中创建一个文件夹 比如叫fonts 或者是其他乱七八糟的名字都随便 都可以 2 将字体文件引入这个fonts文件夹
  • Python的os.walk()方法详细讲解

    http www cnblogs com herbert archive 2013 01 07 2848892 html 写的特别清楚的一篇 http alanland iteye com blog 612459 我们可以看到 返回的是一个
  • jdk的环境搭建

    1 鼠标右键单击 此电脑 左键单击 属性 2 点击 高级系统设置 3 选择 环境变量 4 这里需要配置三个环境变量1 java home 2 classpash 3 path 其中1和2是系统中没有的需要新建 不区分大小写 1 java h
  • (机器学习实战)第四章

    都是在python3下面的 def loadDataSet postingList my dog has flea problems help please maybe not take him to dog park stupid my
  • linux常见文件夹名称及作用

    在Linux系统中 有许多常用的目录 每个目录都有其特定的作用和用途 以下是一些常见的Linux文件夹及其作用的示例 命令 公共 程序 bin 存放系统命令 二进制文件 如ls cp和mkdir等 这些命令可以在系统启动时使用 sbin 与
  • spark源码分析之shufflemanager

    1 shufflemanager的实现类 sortshufflemanager Spark 0 8及以前 Hash Based Shuffle 在Shuffle Write过程按照Hash的方式重组Partition的数据 不进行排序 每个
  • Java 使用esayExcel进行导出、导入包含多个sheet页面

  • Win10 CubeMX 安装java环境,安装不上去的问题解决

    问题描述 运行STM32CubeMX的时候 如果JAVA环境被破坏 会有如下问题 会自动弹出以下安装地址 Download Java for Windows 然后 在下载的文件 选择安装 点击安装后 就没有然后了 网上有建议 更改下面安装文
  • [ C语言 ]三子棋 代码实现

    引言 三子棋是一种简单而又有趣的棋类游戏 它可以帮助我们提高逻辑思维和决策能力 在本文中 我们将使用C语言来实现一个简单的三子棋游戏 并介绍一些基本的算法和技巧 一 游戏规则 1 游戏开始时 棋盘是空的 由两位玩家交替进行操作 2 玩家使用
  • 通过python写脚本简单爆破web页面登陆

    GET传参 import requests url payload username admin password admin submit 登陆 r requests get url params payload result r con
  • Jackson框架

    Jackson框架 一 Jackson简介 Jackson可以轻松的将Java对象转换成json对象和xml文档 同样也可以将json xml转换成Java对象 相比json lib框架 Jackson所依赖的jar包较少 简单易用并且性能