Json与Gson
Json
Json是一种轻量级数据交换格式,便于人的读写,也便于机器的读写,而比较Xml而言,其更适用于机器读写,利用Gson能高效的将Json转化成一个Bean
JSon语法
Json可以简单成以下的结构:
一个花括号里面有各种 Key:Value的键值对1
2
3
4
5
6
7{
"query": "Pizza",
"locations": [
94043,
90210
]
}
对于上面的json,有两点比较重要的:
1.Value可以是JsonObject,JsonArray,String,Boolean,Integer,Long,Double,与JsonObject.NULL。
2.中括号表示一个表示多个Value的集合,也就是数组,其对应的是JsonArray
3.大括号表示一个JsonSon
Json代码编写(org.json)
JsonObject
JsonObject与String的相互转化(不是顺序图)
JsonObject常用方法 | 注解 |
---|---|
get*(String key) | 获取某个键值,查找不到会抛出异常 |
opt*(Stringkey) | 获取某个键值,查找不到会返回null |
put*(String key,T value) | |
remove(String key) | |
accumulate(String key,Object data) | 添加对应键的值,如果已经存在该键其值会变成array |
JsonArray(与JsonObject雷同)
JsonArray与String的相互转化(不是顺序图)
JsonArray常用方法 | 注解 |
---|---|
get*(int index) | 获取某个键值,查找不到会抛出异常 |
opt*(int index) | 获取某个键值,查找不到会返回null |
put*(int index,T value) | |
remove(int index) |
Gson
Gson是Json的一个Java 类库,它能将 Java Bean 与 Json之间 串行化与逆串行化 ,实现Java Bean与 String(Json) 间的相互转化
Gson序列化(Bean<–>Json(String))规则
- 成员变量都会序列化,并且推荐用private
- 但成员变量有transient修饰符将不会序列化(这个跟Java 的Serializable接口实现的机制类似)
- 内部类的成员变量如果引用了外部类实例,则该成员变量不会序列化
总之,成员变量都会序列化,除非有transient修饰符或者内部类引用的外部类实例。
Gson代码
除了非泛型类 转 String(Json)的情况外,均toJson()与fromJson()均需要带类型码
Object不带泛型
Json与Object的转化主要通过Gson的fromJson(),toJson()方法1
Object->Json: gson.toJson(obj)
Json->Object: gson.fromJson(json)
toJson:1
2Gson gson = new Gson(); //新建一个Gson对象,其作用就是一个转换器
String json = gson.toJson(obj);
fromJson:1
2BagOfPrimitives obj = gson.fromJson(json, BagOfPrimitives.class);
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); //int[].class
Object带泛型
Object带泛型的话,
必须先获取Object的Type:
1
Type type=new TypeToken<TypeObject<T>>(){}.getType();
利用type传入toJson(),fromJson()
1 | class Foo<T> { |
注意TypeToken背后的大括号