转载请注明原文地址: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中两种解析工具基本使用的更多相关文章

  1. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  2. java中两种类型变量

    Java中有两种类型的变量,一种是对象类型,另一种是基础类型(primitive type). 对象类型普遍采用引用的方式,比如 List a = new ArrayList(); List b = ...

  3. Java中两种实现多线程方式的对比分析

    本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cf ...

  4. java中两种添加监听器的策略

    /*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/ 1 import java.applet.Applet; i ...

  5. java中两种单例模式

    //懒汉式(线程不安全) class LazySingleton{ private static LazySingleton singleton; private LazySingleton(){} ...

  6. java中两种发起POST请求,并接收返回的响应内容的方式  (转)

    http://xyz168000.blog.163.com/blog/static/21032308201162293625569/ 2.利用java自带的java.net.*包下提供的工具类 代码如 ...

  7. JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。

    JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上. Java(由 Sun 发明)是更复杂的编程语言. ECMA-262 是 JavaScript 标准的官方名称. Jav ...

  8. shell中调用R语言并传入参数的两种步骤

    shell中调用R语言并传入参数的两种方法 第一种: Rscript myscript.R R脚本的输出 第二种: R CMD BATCH myscript.R # Check the output ...

  9. JavaScript中两种类型的全局对象/函数【转】

    Snandy Stop, thinking is the essence of progress. JavaScript中两种类型的全局对象/函数 这里所说的JavaScript指浏览器环境中的包括宿 ...

随机推荐

  1. Python 模块 re (Regular Expression)

    使用 Python 模块 re 实现解析小工具   概要 在开发过程中发现,Python 模块 re(Regular Expression)是一个很有价值并且非常强大的文本解析工具,因而想要分享一下此 ...

  2. Apache Jmeter 教程

    Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter搞定的事情,你就不会使用LoadR ...

  3. go语言之进阶篇error接口的使用

    1.error接口的使用 示例: package main import "fmt" import "errors" func main() { //var e ...

  4. win8 中如何删除 共享文件夹 用户名和密码

    在访问共享文件夹时我们都喜欢选中记住用户名和密码,可是有时候密码输入错误或者密码修改了,这时就需要我们删除或则修改先前记住的用户名和密码记录. 首先进入:控制面板\所有控制面板项\凭据管理器 选择wi ...

  5. 微信公众平台开发----自定义菜单、消息处理及获取OpenID(C#)

    一.成为开发者 服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAESKey,如下图所示: 其中 ...

  6. Mysql 高可用方案

    1 mysql分布式数据库,如 mycat https://www.cnblogs.com/zzsdream/articles/6650690.html 2 读写分离,mysql主从复制+mysql ...

  7. Android studio安装配置常见问题及其解决方案

    Android studio 是目前android公司主推的一款开发工具,相比较以前eclipse,它自己内部就集成了SDK等,方便开发.这几天我也尝试从官网下载了一个android studio进行 ...

  8. Laravel Composer 脚本

    composer update --no-scripts 执行静态文件 composer dump-autoload 文件映射

  9. Packagist 镜像使用方法--composer

    镜像用法 有两种方式启用本镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中.见“方法一” 单个项目配置: 将配置信息添加到某个项目的 com ...

  10. 【流处理】Kafka Stream-Spark Streaming-Storm流式计算框架比较选型

    Kafka Stream-Spark Streaming-Storm流式计算框架比较选型 elasticsearch-head Elasticsearch-sql client NLPchina/el ...