流式API读取和写入JSON内容离散事件。 JsonParser读取数据,而JsonGenerator写入数据。它是三者中最有效的方法,是最低开销和最快的读/写操作。它类似于XML的Stax解析器。
在本文中,我们将展示的使用Jackson的流式API 读写JSON数据。流式API工作使用JSON为每一个细节的都是要小心处理。下面的例子将使用两个类:
JsonGenerator类——写入JSON字符串。
sonGenerator是定义公共API编写的Json内容的基类。使用JsonFactory实例的工厂方法创建实例。
类声明
以下是org.codehaus.jackson.JsonGenerator类的声明:
public abstract class JsonGenerator extends Object implements Closeable
嵌套类
S.N. | 类和说明 |
---|---|
1 | static class JsonGenerator.Feature//枚举定义了生成器的所有togglable功能。 |
构造函数
S.N. | 类和说明 |
---|---|
1 | Default constructor |
JsonParser类——解析JSON字符串。
JsonParser是定义公共API用于读取的Json内容的基类。使用JsonFactory实例的工厂方法创建实例。
类声明
以下是org.codehaus.jackson.JsonParser类的声明:
public abstract class JsonParser extends Object implements Closeable, Versioned
嵌套类
S.N. | 类和说明 |
---|---|
1 | static class JsonParser.Feature //枚举定义了解析器的所有togglable功能。 |
2 | static class JsonParser.NumberType //枚举可用于数字可能的“本地”(最佳)类型。 |
构造函数
S.N. | 类和说明 |
---|---|
1 | protected JsonParser() //默认的构造函数 |
2 | protected JsonParser(int features) |
继承的方法
这个类继承了以下类方法:
java.lang.Object
JsonFactory jasonFactory = new JsonFactory(); JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File( "student.json"), JsonEncoding.UTF8); // { jsonGenerator.writeStartObject(); // "name" : "Mahesh Kumar" jsonGenerator.writeStringField("name", "Mahesh Kumar");
让我们来看看JsonGenerator操作。创建一个名为JacksonTester的Java类文件在目录 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File; import java.io.IOException; import java.util.Map; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; 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 { JsonFactory jasonFactory = new JsonFactory(); JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File( "student.json"), JsonEncoding.UTF8); // { jsonGenerator.writeStartObject(); // "name" : "Mahesh Kumar" jsonGenerator.writeStringField("name", "Mahesh Kumar"); // "age" : 21 jsonGenerator.writeNumberField("age", 21); // "verified" : false jsonGenerator.writeBooleanField("verified", false); // "marks" : [100, 90, 85] jsonGenerator.writeFieldName("marks"); // [ jsonGenerator.writeStartArray(); // 100, 90, 85 jsonGenerator.writeNumber(100); jsonGenerator.writeNumber(90); jsonGenerator.writeNumber(85); // ] jsonGenerator.writeEndArray(); // } jsonGenerator.writeEndObject(); jsonGenerator.close(); //result student.json //{ // "name":"Mahesh Kumar", // "age":21, // "verified":false, // "marks":[100,90,85] //} ObjectMapper mapper = new ObjectMapper(); Map<String,Object> dataMap = mapper.readValue(new File("student.json"), Map.class); System.out.println(dataMap.get("name")); System.out.println(dataMap.get("age")); System.out.println(dataMap.get("verified")); System.out.println(dataMap.get("marks")); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
验证结果
使用javac编译如下类:
C:\Jackson_WORKSPACE>javac JacksonTester.java
C:\Jackson_WORKSPACE>java JacksonTester
Mahesh Kumar 21 false [100, 90, 85]
使用JsonParser 读取JSON
使用JsonParser是非常简单的。首先使用JsonFactory.createJsonParser()方法创建JsonParser,并使用它的nextToken()方法来读取每个JSON字符串作为标记。检查每个令牌和相应的过程。
JsonFactory jasonFactory = new JsonFactory(); JJsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json")); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { //get the current token String fieldname = jsonParser.getCurrentName(); if ("name".equals(fieldname)) { //move to next token jsonParser.nextToken(); System.out.println(jsonParser.getText()); } }
让我们来看看JsonParser的操作。创建一个名为JacksonTester在Java类在文件夹 C:\>Jackson_WORKSPACE.
文件: JacksonTester.java
import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.JsonToken; import org.codehaus.jackson.map.JsonMappingException; public class JacksonTester { public static void main(String args[]){ JacksonTester tester = new JacksonTester(); try { JsonFactory jasonFactory = new JsonFactory(); JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File( "student.json"), JsonEncoding.UTF8); jsonGenerator.writeStartObject(); jsonGenerator.writeStringField("name", "Mahesh Kumar"); jsonGenerator.writeNumberField("age", 21); jsonGenerator.writeBooleanField("verified", false); jsonGenerator.writeFieldName("marks"); jsonGenerator.writeStartArray(); // [ jsonGenerator.writeNumber(100); jsonGenerator.writeNumber(90); jsonGenerator.writeNumber(85); jsonGenerator.writeEndArray(); jsonGenerator.writeEndObject(); jsonGenerator.close(); //result student.json //{ // "name":"Mahesh Kumar", // "age":21, // "verified":false, // "marks":[100,90,85] //} JsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json")); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { //get the current token String fieldname = jsonParser.getCurrentName(); if ("name".equals(fieldname)) { //move to next token jsonParser.nextToken(); System.out.println(jsonParser.getText()); } if("age".equals(fieldname)){ //move to next token jsonParser.nextToken(); System.out.println(jsonParser.getNumberValue()); } if("verified".equals(fieldname)){ //move to next token jsonParser.nextToken(); System.out.println(jsonParser.getBooleanValue()); } if("marks".equals(fieldname)){ //move to [ jsonParser.nextToken(); // loop till token equal to "]" while (jsonParser.nextToken() != JsonToken.END_ARRAY) { System.out.println(jsonParser.getNumberValue()); } } } } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
验证结果
编译使用javac编译如下类:
C:\Jackson_WORKSPACE>javac JacksonTester.java
C:\Jackson_WORKSPACE>java JacksonTester
Mahesh Kumar 21 false [100, 90, 85]
我已经编写了糟糕的代码来解析上面的json数组。下面是我使用的代码, 有谁能帮助我知道使用Jackson解析JSON吗?我们非常感谢你的帮助。
谁能帮我找出我在这里做错了什么。我必须解析下面的XML字符串 为此,我有三个bean要映射,如下所示 我试图像下面这样解析 我使用的是jackson-dataformat-xml版本2.9.8。
在上一周我们实现了一个基本的网络爬虫,但是提取页面信息时使用的是正则表达式,这还是比较烦琐,出错率比较高。 我们爬取的信息大多都是网页信息,网页HTML节点(标签)中定义了大量的id和class属性,而且节点之间还有层级关系。 针对于上述这种格式的解析,给大家介绍几种解析库: a. XPath的使用 b. Beautiful Soup的使用 c. PyQuery的使用
问题内容: 是否有用于解析SQL语句的开源Java库? 如果可能的话,它应该是可定制的或足够灵活的,以能够解析(或至少忽略)特定于供应商的语法(例如Oracle表空间定义或MySQL的LIMIT子句)。 如果没有,严格遵守SQL标准也是可以的。 更新:我需要两件事: 提供到非SQL数据库的SQL接口(映射到内部API调用) 在将SQL移至实际数据库之前(例如Oracle)重写SQL 问题答案: A
本文向大家介绍使用Java中的Jackson库将CSV转换为JSON?,包括了使用Java中的Jackson库将CSV转换为JSON?的使用技巧和注意事项,需要的朋友参考一下 Jackson是一种Java JSON API,它提供了几种使用JSON的不同方式。我们可以使用CsvMapper类将CSV数据转换为JSON数据,它是专用的ObjectMapper,具有从pojo中生成CsvSchema实
本文向大家介绍使用Java中的Jackson库将XML转换为POJO?,包括了使用Java中的Jackson库将XML转换为POJO?的使用技巧和注意事项,需要的朋友参考一下 该JSON杰克逊是一个Java库。它具有非常强大的数据绑定功能,并提供了一个框架,用于将自定义Java对象序列化为JSON并将JSON反序列化为Java对象。我们还可以使用XmlMapper 类的readValue()方法将
本文向大家介绍使用Java中的Jackson库将POJO转换为XML?,包括了使用Java中的Jackson库将POJO转换为XML?的使用技巧和注意事项,需要的朋友参考一下 一个杰克逊 是一个基于Java的库,它可以为Java对象到JSON和JSON转换为Java对象很有用。一个杰克逊API是快于其他的API,需要更少的内存区域,对于大型物体良好。我们使用XmlMapper 类的writeVal
我在通过邮递员传递json数据时遇到问题。如果Mandetory日期带有注释,没问题。另一个日期接受null。但是在更新时,该日期会产生问题。我使用Java1.8与Spring启动 以下链接我已经访问过,但不适合这个。杰克逊JSON解析错误的LocalDateTime解析:无法构造java.time.LocalDate的实例:没有String参数构造函数/工厂方法从String值反序列化https