热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Java的Jackson库的使用及其树模型的入门学习教程

这篇文章主要介绍了Java的Jackson库的使用及其树模型入门学习教程,Jackson库通常被用来作Java对象和JSON的互相转换,需要的朋友可以参考下

Jackson第一个程序
在进入学习jackson库的细节之前,让我们来看看应用程序操作功能。在这个例子中,我们创建一个Student类。将创建一个JSON字符串学生的详细信息,并将其反序列化到学生的对象,然后将其序列化到JSON字符串。

创建一个名为JacksonTester在Java类文件 C:\>Jackson_WORKSPACE.

文件: JacksonTester.java

import java.io.IOException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class JacksonTester {
  public static void main(String args[]){
   ObjectMapper mapper = new ObjectMapper();
   String jsOnString= "{\"name\":\"Mahesh\", \"age\":21}";

   //map json to student
   try {
     Student student = mapper.readValue(jsonString, Student.class);
     System.out.println(student);
     
     mapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);
     jsOnString= mapper.writeValueAsString(student);
     System.out.println(jsonString);

   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }
}

class Student {
  private String name;
  private int age;
  public Student(){}
  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 String toString(){
   return "Student [ name: "+name+", age: "+ age+ " ]";
  } 
}

验证结果

使用javac编译如下类:

代码如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到的结果:
代码如下:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Student [ name: Mahesh, age: 21 ]
{
 "name" : "Mahesh",
 "age" : 21
}

步骤 - 需要记住
以下是这里要考虑的重要步骤。

第1步:创建ObjectMapper对象。
创建ObjectMapper对象。它是一个可重复使用的对象。\

代码如下:

ObjectMapper mapper = new ObjectMapper();


第2步:反序列化JSON到对象。
从JSON对象使用readValue()方法来获取。通过JSON字符串和对象类型作为参数JSON字符串/来源。

//Object to JSON Conversion
Student student = mapper.readValue(jsonString, Student.class);

第3步:序列化对象到JSON。
使用writeValueAsString()方法来获取对象的JSON字符串表示。

//Object to JSON Conversion 
jsOnString= mapper.writeValueAsString(student);

Jackson树模型
树模型准备JSON文件的内存树表示。 ObjectMapper构建JsonNode节点树。这是最灵活的方法。它类似于DOM解析器的XML。

从JSON创建树
ObjectMapper提供一个指针树的根节点在读取JSON之后。根节点可用于遍历完全树。考虑下面的代码片段获得提供JSON字符串的根节点。

//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper(); 
String jsOnString= "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
//create tree from JSON
JsonNode rootNode = mapper.readTree(jsonString);

遍历树模型
使用相对路径来根节点在遍历树,并处理该数据得到的每个节点。考虑下面的代码片段遍历提供的根节点的树。

JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.getTextValue());
 
JsonNode marksNode = rootNode.path("marks");
Iterator iterator = marksNode.getElements();

示例
创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.IOException;
import java.util.Iterator;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
   try {
     ObjectMapper mapper = new ObjectMapper();
     String jsOnString= "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
     JsonNode rootNode = mapper.readTree(jsonString);

     JsonNode nameNode = rootNode.path("name");
     System.out.println("Name: "+ nameNode.getTextValue());

     JsonNode ageNode = rootNode.path("age");
     System.out.println("Age: " + ageNode.getIntValue());

     JsonNode verifiedNode = rootNode.path("verified");
     System.out.println("Verified: " + (verifiedNode.getBooleanValue() ? "Yes":"No"));

     JsonNode marksNode = rootNode.path("marks");
     Iterator iterator = marksNode.getElements();
     System.out.print("Marks: [ ");
     while (iterator.hasNext()) {
      JsonNode marks = iterator.next();
      System.out.print(marks.getIntValue() + " "); 
     }
     System.out.println("]");
   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }
}

验证输出结果

使用javac编译如下类:

代码如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到结果:
代码如下:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]

树到JSON转换
在这个例子中,我们已经使用JsonNode并将其写入到一个JSON文件,并读回创建了一棵树。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
   try {
     ObjectMapper mapper = new ObjectMapper();

     JsonNode rootNode = mapper.createObjectNode();
     JsonNode marksNode = mapper.createArrayNode();
     ((ArrayNode)marksNode).add(100);
     ((ArrayNode)marksNode).add(90);
     ((ArrayNode)marksNode).add(85);
     ((ObjectNode) rootNode).put("name", "Mahesh Kumar");
     ((ObjectNode) rootNode).put("age", 21);
     ((ObjectNode) rootNode).put("verified", false);
     ((ObjectNode) rootNode).put("marks",marksNode);

     mapper.writeValue(new File("student.json"), rootNode);

     rootNode = mapper.readTree(new File("student.json"));

     JsonNode nameNode = rootNode.path("name");
     System.out.println("Name: "+ nameNode.getTextValue());

     JsonNode ageNode = rootNode.path("age");
     System.out.println("Age: " + ageNode.getIntValue());

     JsonNode verifiedNode = rootNode.path("verified");
     System.out.println("Verified: " + (verifiedNode.getBooleanValue() ? "Yes":"No"));

     JsonNode marksNode1 = rootNode.path("marks");
     Iterator iterator = marksNode1.getElements();
     System.out.print("Marks: [ ");
     while (iterator.hasNext()) {
      JsonNode marks = iterator.next();
      System.out.print(marks.getIntValue() + " "); 
     }
     System.out.println("]");
   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }
}

验证结果

使用javac编译如下类:

代码如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到的结果:
代码如下:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]
从树到Java对象转换
在这个例子中,我们已经使用JsonNode并将其写入到一个JSON文件,并回读然后将一个Student对象其转换为创建了一棵树。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
   try {
     ObjectMapper mapper = new ObjectMapper();

     JsonNode rootNode = mapper.createObjectNode();
     JsonNode marksNode = mapper.createArrayNode();
     ((ArrayNode)marksNode).add(100);
     ((ArrayNode)marksNode).add(90);
     ((ArrayNode)marksNode).add(85);
     ((ObjectNode) rootNode).put("name", "Mahesh Kumar");
     ((ObjectNode) rootNode).put("age", 21);
     ((ObjectNode) rootNode).put("verified", false);
     ((ObjectNode) rootNode).put("marks",marksNode);

     mapper.writeValue(new File("student.json"), rootNode);

     rootNode = mapper.readTree(new File("student.json"));

     Student student = mapper.treeToValue(rootNode, Student.class);

     System.out.println("Name: "+ student.getName());
     System.out.println("Age: " + student.getAge());
     System.out.println("Verified: " + (student.isVerified() ? "Yes":"No"));
     System.out.println("Marks: "+Arrays.toString(student.getMarks()));
   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }
}

class Student {
  String name;
  int age;
  boolean verified;
  int[] marks;
  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 boolean isVerified() {
   return verified;
  }
  public void setVerified(boolean verified) {
   this.verified = verified;
  }
  public int[] getMarks() {
   return marks;
  }
  public void setMarks(int[] marks) {
   this.marks = marks;
  }
}

验证结果

使用javac编译如下类:

代码如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到结果:
代码如下:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]


推荐阅读
  • Win10 UWP 开发技巧:利用 XamlTreeDump 获取 XAML 元素树
    本文介绍如何在 Win10 UWP 开发中使用 XamlTreeDump 库来获取和转换 XAML 元素树为 JSON 字符串,这对于 UI 单元测试非常有用。 ... [详细]
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • RedHat 系统下配置国内 YUM 源以替代官方收费源的方法
    本文详细介绍如何在 RedHat Linux 中安装并配置 YUM 包管理器,并通过使用国内镜像源来解决因未购买官方服务而导致的更新源限制问题。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 本文介绍了如何在WildFly 10中配置MySQL数据源时遇到的服务依赖问题及其解决方案。 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • 提供便捷的在线服务,用于JSON数据的查看、编辑和格式化,适合开发者和数据处理人员使用。 ... [详细]
  • 唐都温泉花园项目现状分析
    唐都温泉花园项目在总收入接近3.5亿元的情况下,出现了严重的资金管理问题,导致政府支持的经济适用房项目面临停工风险。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • 最近同事提了一个需求过来,他觉得项目对于第三方日志记录的太多了,只想记录一些业务相关的日志减少对于框架日志的显示。具体要求就是对于框架日志只显示warn等级以上的,而业务日志显示info等级以上 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
author-avatar
Wi俏娃寒躯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有