您的位置:首页 > Web前端 > JavaScript

JSON格式数据解析及GSON框架的使用详解

2017-05-14 22:32 876 查看

JSON

优缺点

优点:比起XML,JSON优势在于它的体积更小,在网络传输中可以更省流量。

缺点:语义性较差,不如XML直观。

JSONObject

JSON对象格式:

{"id":1,"name":"Java"}


一个{}里面的内容表示一个JSON对象。

一个”key”:value,表示一个键值。

String型的value要用”“修饰。

也可以:

{"book":{"id":1,"name":"Java"}}


表示key对于的value是JSON对象。

JSONArray

JSON数组格式:

[
{"id":1,"name":"Java"},
{"id":2,"name":"xml"},
{"id":3,"name":"Android"}
]


一个[]里面的内容表示一个JSON数组,包含多个JSONObject。

也可以:

{"book":[
{"id":1,"name":"Java"},
{"id":2,"name":"xml"},
{"id":3,"name":"Android"}
]}


表示key对于的value是JSON数组。

使用JSONObject解析

解析JSONObject

private void parseJSonObject(String json) {
try {
JSONObject object = new JSONObject(json);//转换为JSON对象
int id = object.getInt("id");
String name = object.getString("name");
System.out.println(id + ":" + name);
} catch (JSONException e) {
e.printStackTrace();
}
}


解析JSONArray

private void parseJson(String json) {
try {
JSONArray array = new JSONArray(json);//转换为JSON数组
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);//获取JSON对象
int id = object.getInt("id");//根据类型获取对应的值
String name = object.getString("name");
System.out.println(id + ":" + name);
}
} catch (JSONException e) {
e.printStackTrace();
}
}


使用GSON解析

添加依赖

dependencies {
...
compile 'com.google.code.gson:gson:2.7'
...
}


定义对应的数据类

定义一个数据类,要求与JSON数据中的值一一对应。如下:

public class Book {
int id;
String name;
public Book(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


解析JSONObject

private void parseGsonObject(String json1) {
Gson gson = new Gson();//创建Gson对象
Book book = gson.fromJson(json1, Book.class);//转为数据类型
System.out.println(book.getId() + ":" + book.getName());
}


解析JSONArray

如果是JSON数组,会比较麻烦没需要借助TypeToken将期望的数据类型传入到fromJson()中。

private void parseGsonArray(String json2) {
Gson gson = new Gson();
List<Book> booklist = gson.fromJson(json2, new TypeToken<List<Book>>() {
}.getType());
for (Book book : booklist) {
System.out.println(book.getId() + ":" + book.getName());
}
}


List转为JSON格式数据

List数据也是一个key对应一个value,因此也可以使用Gson对象的toJson()方法将List数据转为String类型,进而转换为JSON对象。

Gson gson = new Gson();
String json = gson.toJson(booklist);//上面方法得到的list
System.out.println(json);


结语

除官方的JSONObject,与谷歌的开源GSON,一些第三方Jackson,FastJSON(阿里开源的)等也很不错。

其中如果JSON格式的数据形式比较统一,则使用GSON比较方便;如果数据形式不统一,则使用JSONObject比较好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: