JSON语言规范与Java中两种解析工具基本使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html
一:JSON语言规范
一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个数组”
key:只能是string
value:可以是string、number、boolean、null
二:Jackson数据绑定方式操作JSON
Jackson操作JSON主要用到两个类:JsonGenerator、objectMapper
准备工作:创建objectMapper,并由objectMapper创建JsonGenerator
ObjectMapper objectMapper = new ObjectMapper();
JsonGenerator jsonGenerator=objectMapper.getJsonFactory()
.createJsonGenerator(fileoutputStream, encoding);//通过文件流打开一个文本文档,并指明编码格式
1:Java对象转JSON
JavaBean、Map对象、list对象、数组对象转JSON
jsonGenerator.writeObject(bean);
或
objectMapper.writeValue(outputStream,bean);
2:读取JSON字符串转换成Java对象、Map对象、List对象、数组
1)读取JSON字符串转JavaBean
ClassName bean= objectMapper.readValue(json_String, ClassName.class);//传一个class对象作为通过json字符串构造java对象的依据
2)读取JSON字符串转List对象
List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json_string, List.class);
(注意:此处List中的泛型不能指定为某中JavaBean类似,只能用LinkedHashMap,因为泛型转换不能识别到集合中的对象类型)
3)读取JSON字符串转数组
ClassName[] arr = objectMapper.readValue(json_string, ClassName[].class);//同理,传递class对象作为解析JSON字符串的依据
4)读取JSON字符串转Map对象
Map<String, Map<String, Object>> maps = objectMapper.readValue(jsonstring, Map.class);
三:Gson操作JSON
1:Java对象转JSON
1)简单转换(无格式)
Gson gson=new Gson();
String jsonstring=gson.toJson(bean);
2)带格式转换:需要使用builder来生成Gson,通过builder来设定转换格式。
GsonBuilder builder=new GsonBuilder();
builder.setXXX();//改名、缩进等
Gson gson=builder.create();
String jsonstring=gson.toJson();
3)Gson注释制定规则
可以在JavaBean定义时,为某个字段添加Gson注释,指定转换为Json时该字段的别名、格式等。
4)transient
用transient修饰的字段不会被序列化,也就是说不会转换为Json字符串
2:JSON解析
1)简单转换:把Json数据解析为 String:String键值对
Gson gson=new Gson();
ClassName bean=gson.fromJson(jsonstring,class);//解析Json字符串
ClassName bean=gson.f romJson(reader,class);//解析文件中的Json数据
2)带格式转换:根据数据格式解析Json字符串中键值对,使解析达到的对象的字段值符号定义时的类型
GsonBuilder builder=new GsonBuilder();
builder.setXXFormat("数据类型格式");//XX是一种数据类型,参数为该类型数据的格式。比如:Date类型。这样Json数据中符号该格式的内容解析出来就是XX类型而不是String。
Gson gson=builder.create();
ClassName bean=gson.fromJson(jsonstring,class);//解析Json字符串
ClassName bean=gson.f romJson(reader,class);//解析文件中的Json数据
(注意:Java中集合类、数组,转换为Json时都是Json数组;而Json数组转换过来时,则自动根据数组名对应的类型来自动转换成集合类、Java数组)
JSON语言规范与Java中两种解析工具基本使用的更多相关文章
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- java中两种类型变量
Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...
- Java中两种实现多线程方式的对比分析
本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cf ...
- java中两种添加监听器的策略
/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/ 1 import java.applet.Applet; i ...
- java中两种单例模式
//懒汉式(线程不安全) class LazySingleton{ private static LazySingleton singleton; private LazySingleton(){} ...
- java中两种发起POST请求,并接收返回的响应内容的方式 (转)
http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...
- JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。
JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上. Java(由 Sun 发明)是更复杂的编程语言. ECMA-262 是 JavaScript 标准的官方名称. Jav ...
- shell中调用R语言并传入参数的两种步骤
shell中调用R语言并传入参数的两种方法 第一种: Rscript myscript.R R脚本的输出 第二种: R CMD BATCH myscript.R # Check the output ...
- JavaScript中两种类型的全局对象/函数【转】
Snandy Stop, thinking is the essence of progress. JavaScript中两种类型的全局对象/函数 这里所说的JavaScript指浏览器环境中的包括宿 ...
随机推荐
- 黑镜第一至二季/全集Black Mirror迅雷下载
本季第一.二季 Black Mirror (2011-2013)看点:<黑镜>(Black Mirror)是一部由查理·布洛克主创.英国电视4台(Channel 4)于2011年12月播出 ...
- 实习医生格蕾第十三季/全集Grey’s Anatomy迅雷下载
英文全名Grey's Anatomy,第13季(2016)ABC.本季看点:<实习医生格蕾>(Grey’s Anatomy)上季终集里,又一名资深演员离开了——Sara Ramirez扮演 ...
- 管理Mysql常用指令
知识会更新,数据库系统也一样,本文只保证对Mysql 5.7以及MariaDB 10有效. 编码篇 展示当前默认的编码和字符集 SHOW VARIABLES LIKE 'char%'; 修改服务器默认 ...
- pip 安装错误 'ascii' codec can't encode characters
安装 python-dev既可解决 apt-get install python-dev
- Android中的输入法
提起输入法我就想到了Edittext,输入法可以自动根据inputType来改变键盘的布局,在支付钱包中还特别隐藏的系统自带的输入法,直接让用户用软件自己的输入法,提高了安全性.所以,我们应该对输入法 ...
- [Web 前端] 前端频道之团队维护、聚合、订阅
cp from :https://blog.csdn.net/ivan820819/article/details/78885404 国内 腾讯 ISUX 腾讯全端 AlloyTeam 奇舞周刊 阿里 ...
- 获取客户端网卡MAC地址和IP地址实现JS代码
获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载 获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...
- 一种开源的分布式消息系统Nats
一种开源的分布式消息系统Nats 作者:chszs.未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 1.NATS介绍 NATS是一个开源的 ...
- B. Random Teams(Codeforces Round 273)
B. Random Teams time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- C#与Visual Basic的异与同
C#是一种高级程序设计语言,是一种安全.稳定.简单.优雅的编程语言,它与Visual Basic有很多相同的地方,同时也有很多不同的地方.我们今天这篇博客本着学习C#的原则,着重介绍一下C#与Visu ...