文章目录
  1. 1. Json
    1. 1.1. JSon语法
    2. 1.2. Json代码编写(org.json)
      1. 1.2.1. JsonObject
    3. 1.3. JsonArray(与JsonObject雷同)
  2. 2. Gson
    1. 2.1. Gson序列化(Bean<–>Json(String))规则
    2. 2.2. Gson代码
      1. 2.2.1. Object不带泛型
      2. 2.2.2. Object带泛型

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))规则

  1. 成员变量都会序列化,并且推荐用private
  2. 但成员变量有transient修饰符将不会序列化(这个跟Java 的Serializable接口实现的机制类似)
  3. 内部类的成员变量如果引用了外部类实例,则该成员变量不会序列化
    总之,成员变量都会序列化,除非有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
2
Gson gson = new Gson(); //新建一个Gson对象,其作用就是一个转换器
String json = gson.toJson(obj);

fromJson:

1
2
BagOfPrimitives obj = gson.fromJson(json, BagOfPrimitives.class);
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); //int[].class

Object带泛型

Object带泛型的话,

  1. 必须先获取Object的Type:

    1
    Type type=new TypeToken<TypeObject<T>>(){}.getType();
  2. 利用type传入toJson(),fromJson()

1
2
3
4
5
6
7
8
class Foo<T> {
T value;
}
Gson gson = new Gson();
Type fooType = new TypeToken<Foo<Bar>>() {}.getType(); //获取type
gson.toJson(foo, fooType);

gson.fromJson(json, fooType);

注意TypeToken背后的大括号

文章目录
  1. 1. Json
    1. 1.1. JSon语法
    2. 1.2. Json代码编写(org.json)
      1. 1.2.1. JsonObject
    3. 1.3. JsonArray(与JsonObject雷同)
  2. 2. Gson
    1. 2.1. Gson序列化(Bean<–>Json(String))规则
    2. 2.2. Gson代码
      1. 2.2.1. Object不带泛型
      2. 2.2.2. Object带泛型