JsonParser、JsonParserFactory、JsonLocation源码翻译
package javax.json.stream;import java.io.Closeable;
import java.math.BigDecimal;/*** 目的:流方式读取JSON数据* * <p>以流的方式提供一个向前只读来访问JSON数据。这是最有效读取JSON数据的方法。* {@link javax.json.Json}含有能够解析来自输入源(如:InputStream或Reader)数据的方法。* * <p>以下示例说明一个字符串解析成空的JSON数组:* JsonParser parser = Json.createParser(new StringReader("[]"));* * <p>{@link JsonParserFactory}创建JsonParser实例:* JsonParserFactory factory = Json.createParserFactory();* JsonParser parser1 = factory.createParser(...);* JsonParser parser2 = factory.createParser(...);* * <p>JsonParser能解析JSON使用的编程模型。这个模型中,客户机能控制线程并调用{@code next()}* 方法来推进解析器处理每个元素的下一个状态。解析器能生成以下事件:* START_OBJECT,END_OBJECT,START_ARRAY,END_ARRAY,KEY_NAME,* VALUE_STRING,VALUE_NUMBER,VALUE_TRUE,VALUE_FALSE,VALUE_NULL。* * <p>例如,对于一个空JSON对象({ })。当解析器第一次调用next(),将生成一个START_OBJECT事件。* 第二次调用next(),将生成一个END_OBJECT事件。如以下代码所示:* Event event = parser.next(); // START_OBJECT* event = parser.next(); // END_OBJECT* * <p>例如:以下的JSON示例:* {* "firstName": "John", "lastName": "Smith", "age": 25,* "phoneNumber": [* { "type": "home", "number": "212 555-1234" },* { "type": "fax", "number": "646 555-4567" }* ]* }* 对应事件:* {START_OBJECT* "firstName"KEY_NAME: "John"VALUE_STRING,* "lastName"KEY_NAME: "Smith"VALUE_STRING, * "age"KEY_NAME: 25VALUE_NUMBER,* "phoneNumber"KEY_NAME : * [START_ARRAY* {START_OBJECT * "type"KEY_NAME: "home"VALUE_STRING, * "number"KEY_NAME: "212 555-1234"VALUE_STRING * }END_OBJECT,* {START_OBJECT * "type"KEY_NAME: "fax"VALUE_STRING, * "number"KEY_NAME: "646 555-4567"VALUE_STRING * }END_OBJECT* ]END_ARRAY* }END_OBJECT* * <p>使用next()和hasNext()可以迭代解析JSON数据事件,JsonParser对象能够获取当前解析器状态* 的值。例如,以下代码显示怎么获取“John”值:* Event event = parser.next(); // START_OBJECT* event = parser.next(); // KEY_NAME* event = parser.next(); // VALUE_STRING* parser.getString(); // "John"* @author TCM* @create 2017年11月7日上午11:08:52* @see javax.json.Json* @see JsonParserFactory*/
public interface JsonParser extends /*Auto*/Closeable {//事件enum Event {START_ARRAY, //JSON数组的开始,解析器位置在'['之后START_OBJECT,//JSON对象的开始,解析器位置在'{'之后KEY_NAME, //JSON对象的name值,getString()获取,解析器位置在KEY_NAME之后VALUE_STRING,//JSON对象的value值,getString()获取,解析器位置在VALUE_STRING之后VALUE_NUMBER,//JSON对象或数组的value值,getInt()...获取,位置在VALUE_NUMBER之后VALUE_TRUE, //JSON对象或数组的value值,位置在VALUE_TRUE之后VALUE_FALSE, //JSON对象或数组的value值,位置在VALUE_FALSE之后VALUE_NULL, //JSON对象或数组的value值,位置在VALUE_NULL之后END_OBJECT, //JSON对象的结束,解析器位置在'}'之后END_ARRAY //JSON数组的结束,解析器位置在']'之后}//解析器是否有一个事件boolean hasNext();//下一个解析状态的事件Event next();String getString();boolean isIntegralNumber();int getInt();long getLong();BigDecimal getBigDecimal();//获取解析器当前状态的位置(输入源中的位置)JsonLocation getLocation();//关闭解析器并释放资源@Overridevoid close();}
package javax.json.stream;import javax.json.JsonArray;
import javax.json.JsonObject;
import java.io.InputStream;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.Map;/*** 目的:工厂创建JsonParser实例* * <p>工厂创建{@link JsonParser}实例。若果一个工厂实例被配置信息配置,则该配置应用到* 所有创建JsonParser实例中。* * <p>{@link javax.json.Json Json}类也提供创建JsonParser实例的方法,但是* 使用工厂方法创建多个JsonParser实例是最好的,如下所示:* JsonParserFactory factory = Json.createParserFactory();* JsonParser parser1 = factory.createParser(...);* JsonParser parser2 = factory.createParser(...);* * <p>该类所有的方法都是线程安全的,使用在多并发线程。* @author TCM* @create 2017年11月7日下午1:56:17*/
public interface JsonParserFactory {JsonParser createParser(Reader reader);JsonParser createParser(InputStream in);JsonParser createParser(InputStream in, Charset charset);JsonParser createParser(JsonObject obj);JsonParser createParser(JsonArray array);//获取配置属性的mapMap<String, ?> getConfigInUse();}
package javax.json.stream;
/*** 目的:JSON事件的位置信息* * <p>提供一个JSON事件在输入源中的位置信息。{@code JsonLocation}信息用来识别错误的* JSON,或是更高的框架使用这些信息能够知道处理位置。** <p>{@code JsonLocation}提供这些信息是可选的。例如,可以提供行号。另外,输入源中* 没有任何位置信息。例如:JsonParser从输入源解析成JsonArray,所有的方法返回-1。* @author TCM* @create 2017年11月7日上午10:36:24* @see JsonParser* @see JsonParsingException*/
public interface JsonLocation {//当前JSON事件在输入源中的行号(若没有行号,则返回-1)long getLineNumber();//当前JSON事件在输入源中的列号(若没有列号,则返回-1)long getColumnNumber();/*** 返回输入源中的流的位置指向。如果输入源是文件或字节流,那么在流中的位置是以字节为指向。* 但是输入源是字符流,那么字符的位置是指向。若没有偏向,则返回-1。* @return 流中的位置偏向(指针位置),没有则返回-1*/long getStreamOffset();}
JsonParser、JsonParserFactory、JsonLocation源码翻译相关推荐
- ArrayList源码翻译
ArrayList源码翻译 简介 属性解读 初始化 添加方法 get方法 set方法 remove方法 contains方法 clone方法 总结 简介 ArrayList 是 java 集合框架中比 ...
- three.js源码翻译及案例(五)-GLTFLoader.js
写在前面 Three中的加载脚本很多,但是核心思想是差不多的,就是文件用文件解析器加载,图片用图片解析器加载,然后json转换为对象,但是由于gltf格式可以自己编辑所以有的源码参考意义不大,glb及 ...
- easyui源码翻译1.32--Messager(消息窗口)
前言 使用$.messager.defaults重写默认值对象.下载该插件翻译源码 消息窗口提供了不同的消息框风格,包含alert(警告框), confirm(确认框), prompt(提示框), p ...
- easyui源码翻译1.32--ValidateBox(验证框)
前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...
- easyui源码翻译1.32--panel(面板)
前言 昨天发布了表格datagrid的翻译源码 ,easyui的许多插件有依赖关系 比如datagrid 的渲染需要panel.resizable.linkbutton.pagination 今 ...
- easyui源码翻译1.32--SearchBox(搜索框)
前言 使用$.fn.searchbox.defaults重写默认值对象.下载该插件翻译源码 搜索框提示用户需要输入搜索的值.它可以结合一个菜单,允许用户选择不同的搜索类别.在用户按下回车键或点击组件右 ...
- easyui源码翻译1.32--Window(窗口)
前言 扩展自$.fn.panel.defaults.使用$.fn.window.defaults重写默认值对象.下载该插件翻译源码 窗口控件是一个浮动和可拖拽的面板可以用作应用程序窗口.默认情况下,窗 ...
- KafkaConsumer源码翻译(中英对照)
阅读kakka源码时,英语不好,翻译的比较费劲,经常翻译了后面的,忘记了前面说的什么了,等回到前面之后,前面说的是什么,英文又不认识了,在这里做一个记录,慢慢写吧,估计会写的很艰难,目前更新的不多,哎 ...
- Unity信号干扰shader(参照崩坏3源码翻译剧情对话效果)
最近做的项目是二次元,二次元的标杆就是崩坏3,效果真的好 学习崩坏3里面shader最好的方法就是看源码 可以AssetStudio来看资源,因为崩坏3资源是没有加密直接可以看 不过shader源码是 ...
最新文章
- Scala隐式转换之隐式类
- 入手腾龙SP AF90mm MACRO
- 《c语言从入门到精通》看书笔记——第7章 循环控制
- C# 面向对象三大特性:封装、继承、多态
- Linux下文件的压缩和解压
- 学python开发必须要会wsgi么_学python着几个要搞清楚WSGI和uWSGI区别
- android select下拉列表_Python+selenium自动化之下拉列表操作(一)
- 【NOIP2013】【Luogu1983】车站分级(建图,拓扑排序)
- Android学习笔记之Bitmap位图的缩放
- Java开发实战经典【Java基础】
- STM32 CubeMX 串口通信
- iOS13 Scene Delegate详解
- 时钟晶振电路EMC设计标准电路详解
- C - The Little Girl who Picks Mushrooms HDU - 4422
- SPIR-V教程 -- SPIRV变量
- 仿京东商城商品分类搜索功能
- 安装并使用Ghidra的Eclipse插件的过程
- Qt for iOS,Qt 与Objective C混合编程
- 如何用 R 绘制动态统计图?
- JVM学习之---了解JIT
热门文章
- MATLAB官方权威免费视频教程(入门+深度学习)
- java 爬虫框架 j_一个分布式java爬虫框架JLiteSpider
- 结对-人机对战象棋游戏-设计文档
- iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?
- 基于opencv的模板匹配详解
- [STM32]详解单片机GPIO输出模式配置-推挽与开漏
- 几何代数(Geometric Algebra 也叫克利福德代数 Clifford Algebra)简介
- C语言指针之二malloc的用法及详解
- 要不要一起爬山?百度大脑EasyDL邀你一起翻越企业AI落地的高山
- RS232/485串口转CANbus总线网关模块CAN232/485MB转换器CANCOM的简介