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数组

  

原文地址:https://www.cnblogs.com/ygj0930/p/6652250.html