Jackson解析与生成Json字符串
Jackson API:http://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9
流式API读取和写入JSON内容离散事件。 JsonParser读取数据,而JsonGenerator写入数据。它是三者中最有效的方法,是最低开销和最快的读/写操作。它类似于XML的Stax解析器。
在本文中,我们将展示的使用Jackson的流式API 读写JSON数据。流式API工作使用JSON为每一个细节的都是要小心处理。下面的例子将使用两个类:
JsonGenerator - 写入JSON字符串。
JsonParser - 解析JSON字符串。
使用JsonGenerator写入JSON
使用JsonGenerator是非常简单的。首先使用JsonFactory.createJsonGenerator()方法创建一个JsonGenerator,并用write***()方法来写每一个JSON值。
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" : 21jsonGenerator.writeNumberField("age", 21);// "verified" : falsejsonGenerator.writeBooleanField("verified", false); // "marks" : [100, 90, 85]jsonGenerator.writeFieldName("marks"); // [jsonGenerator.writeStartArray(); // 100, 90, 85jsonGenerator.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
现在运行jacksonTester看到的结果:
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 tokenString fieldname = jsonParser.getCurrentName();if ("name".equals(fieldname)) {//move to next tokenjsonParser.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 tokenString fieldname = jsonParser.getCurrentName();if ("name".equals(fieldname)) {//move to next tokenjsonParser.nextToken();System.out.println(jsonParser.getText()); }if("age".equals(fieldname)){//move to next tokenjsonParser.nextToken();System.out.println(jsonParser.getNumberValue()); }if("verified".equals(fieldname)){//move to next tokenjsonParser.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();}} }
Jackson解析与生成Json字符串相关推荐
- java解析与生成json数据的四种方式,比如将json字符串转为json对象或json对象转为json字符串
文章目录 1. 详说json 1.1 何为json 1.2 json语法 2. Java解析与生成JSON的四种方式 2.1 传统方式 2.2 利用Jackson方式 2.3 利用Gson方式 2.4 ...
- 字符串不替代_使用第三方库demjson解析不规范的json字符串
Json在编程中是一种轻量级的文件格式,在本地开发或者web开发中使用较多.JSON(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是 ...
- 讯飞实时语音转写 python3.6.1 可完美运行 解析返回的json字符串 输出所获语音文字
百度语音识别对录音要求较高(可能是我的问题,sdk和在线api都试过了(滑稽保命)),失败后选择讯飞语音,官方提供的文档是python2版本的 ,经过修改后可在python3中运行 ,解析返回的jso ...
- iOS json解析 和生成json串
1.生成json字符串 NSData * jsonData = [NSJSONSerialization dataWithJSONObject:detailDic options:0 error:ni ...
- java解析多层嵌套json字符串
java解析多层嵌套json字符串 java分别解析下面两个json字符串 package jansonDemo;import com.alibaba.fastjson.JSON; import co ...
- JsonObject生成Json字符串有转意字符
"PatientInfo": {"Name": "{\"GivenName\":\"sduie\"}" ...
- Java系列之:生成Json字符串
Java系列之:生成Json字符串 一.拼接Json字符串 二.使用JSONObject()生成字符串 一.拼接Json字符串 import com.alibaba.fastjson.JSONObje ...
- jaxb xsd生成xml_使用JAXB和Jackson从XSD生成JSON模式
jaxb xsd生成xml 在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演 ...
- 使用JAXB和Jackson从XSD生成JSON模式
在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演示了JAXB实现的用法(与J ...
最新文章
- 好渴望 wacom Intuos3
- 报错: MLPClassifier:ConvergenceWarning: Stochastic Optimizer: Maximum iterations (400) reached
- VisualStudio2017中新建项目没有Asp.Net项目
- 通过栈(Stack)实现对树的遍历
- NOI入门级:数据结构之线性表
- 动态列排序_Excel表格利用函数制作排序器(可依据不同字段、升降序排序)
- Java中矩阵运算(math3的使用)
- (72)加法器设计(全加器)
- 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例【转】
- json数组转换成java对象_json中包含json数组怎么转换成java对象
- 肠道微生物组测试说明解读
- 氩弧焊机的电气图_氩弧焊机的工作原理以及接线图
- (二)Chrome新标签页的设置
- Java 培训 MySQL 体系构架、存储引擎和索引结构
- mobi文件怎么打开?
- 【自适应盲均衡12】判决引导(DD)+判决反馈(DFE)+双模式切换的盲均衡算法在双绞线基带通信中的应用MATLAB仿真(采用三电平PAM信号模型)
- 大脑的四个黄金记忆时间段
- HDU6598 Harmonious Army
- 汇编语言中间接寻址(间接操作数)与变址寻址(变址操作数)的区别
- Presto Iceberg 数据源 + Alluxio 使用以及最新进展介绍