Json数据解析详解及使用:
前言:josn数据的解析是我们开发app最基本的,json解析的方法有很多,下面就给你们详细解释一下我们开发中最常用的几种,来方便使用。
一、使用我们原生的Android技术解析JSON:
1、解析JSON对象的API:JsonObject
示例代码:
(1)获取或创建JSON数据(为了方便,这里就直接创建了):
String json = "{\n" +
"\t\"id\":2, \"name\":\"金鱼\", \n" +
"\t\"price\":12.3, \n" +
"\t\"imagePath\":\"http://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +
"}\n";
ShopInfo shopInfo = null;
(2)解析Json对象:
try {
JSONObject jsonObject = new JSONObject(json);
// int id = jsonObject.getInt("id");
int id1 = jsonObject.optInt("id");
String name = jsonObject.optString("name");
double price = jsonObject.optDouble("price");
String imagePath = jsonObject.optString("imagePath");
// 封装Java对象
shopInfo = new ShopInfo(id1, name, price, imagePath);
} catch (JSONException e) {
e.printStackTrace();
}
注意:这个要try_catch异常处理。
(3)创建JavaBean类,并显示解析后的数据:
tv_native_last.setText(shopInfo.toString());
这个JsonObject我就不用多讲了,这种方法相信我们用了很久了大家都知道
2、解析Json数组的API:JSONArray
示例代码:
(1)获取或创建JSON数据:
String json = "[\n" +
" {\n" +
" \"id\": 1,\n" +
" \"imagePath\": \"http://blog.csdn.net/qq_29269233/f1.jpg\",\n" +
" \"name\": \"金鱼1\",\n" +
" \"price\": 12.3\n" +
" },\n" +
" {\n" +
" \"id\": 2,\n" +
" \"imagePath\": \"http://blog.csdn.net/qq_29269233/f2.jpg\",\n" +
" \"name\": \"金鱼2\",\n" +
" \"price\": 12.5\n" +
" }\n" +
"]";
(2)解析json数组:
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject != null) {
int id = jsonObject.optInt("id");
String name = jsonObject.optString("name");
double price = jsonObject.optDouble("price");
String imagePath = jsonObject.optString("imagePath");
// 封装Java对象
ShopInfo shopInfo = new ShopInfo(id, name, price, imagePath);
shops.add(shopInfo);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
(3)显示解析后的数据:
tv_native_last.setText(shops.toString());
二、使用我们Google爸爸提供的Gson框架技术解析JSON:
先放出jar包的下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson
1、用Gson解析JSON对象:
使用方式:
步骤1:用Gson解析JSON对象:
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
步骤2:创建Gson对象:
Gson gson = new Gson();
步骤3: 通过创建的Gson对象调用fromJson()方法,返回该json数据对象的Java对象;
ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);
示例代码如下:
// 1 获取或创建JSON数据
String json = "{\n" +
"\t\"id\":2, \"name\":\"金鱼\", \n" +
"\t\"price\":12.3, \n" +
"\t\"imagePath\":\"http://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +
"}\n";
// 2 解析JSON数据
Gson gson = new Gson();
ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);
// 3 展示数据
tv_gson_last.setText(shopInfo.toString());
2、用Gson解析JSON数组:
与上基本面相同,要用Gson就要先添加依赖,然后创建Gson对象;
通过创建的Gson对象调用fromJson()方法,返回该json数据对应的Java集合。
// 1 获取或创建JSON数据
String json = "[\n" +
" {\n" +
" \"id\": 1,\n" +
" \"imagePath\": \"http://blog.csdn.net/qq_29269233/f1.jpg\",\n" +
" \"name\": \"金鱼1\",\n" +
" \"price\": 12.3\n" +
" },\n" +
" {\n" +
" \"id\": 2,\n" +
" \"imagePath\": \"http://blog.csdn.net/qq_29269233/f2.jpg\",\n" +
" \"name\": \"金鱼2\",\n" +
" \"price\": 12.5\n" +
" }\n" +
"]";
// 2 解析JSON数据
Gson gson = new Gson();
List<ShopInfo> shops = gson.fromJson(json, new TypeToken<List<ShopInfo>>() {
}.getType());
// 3 展示数据
tv_gson_last.setText(shops.toString());
三、用Fastjson框架技术解析JSON:
Fastjson是阿里巴巴开源框架,已经开源到github上了,地址为:https://github.com/alibaba/fastjson
使用方式(先导入jar包,或者在Gradle中添加依赖):
compile 'com.alibaba:fastjson:1.1.55.android'
1、用Fastjson解析JSON对象:
示例代码:
// 1 获取或创建json数据
String json = "{\n" +
"\t\"id\":2, \"name\":\"金鱼\", \n" +
"\t\"price\":12.3, \n" +
"\t\"imagePath\":\"http://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +
"}\n";
// 2 解析JSON数据
ShopInfo shopInfo = JSON.parseObject(json, ShopInfo.class);
// 3 显示数据
tv_fastjson_last.setText(shopInfo.toString());
2.用Fastjson解析JSON数组:
利用Fastjson的JSON调用parseArray()方法,获取转换后的Java集合。
// 1 获取或创建json数据
String json = "[\n" +
" {\n" +
" \"id\": 1,\n" +
" \"imagePath\": \"http://blog.csdn.net/qq_29269233/f1.jpg\",\n" +
" \"name\": \"金鱼1\",\n" +
" \"price\": 12.3\n" +
" },\n" +
" {\n" +
" \"id\": 2,\n" +
" \"imagePath\": \"http://blog.csdn.net/qq_29269233/f2.jpg\",\n" +
" \"name\": \"金鱼2\",\n" +
" \"price\": 12.5\n" +
" }\n" +
"]";
// 2 解析JSON数据
List<ShopInfo> shopInfos = JSON.parseArray(json, ShopInfo.class);
// 3 显示数据
tv_fastjson_last.setText(shopInfos.toString());
这里的话,json解析就详细解释完了,在这里我总结一下这三种的特点,第一种解析方式原生JsonObject的解析方式:API步骤多麻烦,对于复杂的json数据解析很容易出错!(不推荐使用) 第二种Gson解析方式:代码量简洁,可以很方便地解析复杂的Json数据,而且谷歌官方也推荐使用。(推荐使用) 第三种FastJson解析方式:用Java语言编写的高性能功能完善的JSON库,代码也简洁方便。