简述
今天主要学习了JSON数据解析的方法,目前所了解的JSON数据的解析方法有两种:一种是采用系统接口解析JSON数据,另外就是借助第三方的解析工具Gson(谷歌出品)或fastjson(阿里巴巴出品)等。
JSON的简介
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:对象表示为键值对、数据由逗号分隔、花括号保存对象、方括号保存数组。
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
JSON 和 JS 对象互转:
要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
JSON 和 XML比较:
可读性
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
可扩展性
XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。
编码难度
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。
格式
XML和JSON都使用结构化方法来标记数据,但JSON 简单的语法格式和清晰的层次结构明显要比 XML容易阅读,并且在数据交换方面,由于JOSN所使用的字符要比XML少得多,可以大大得节约传输数据所占用得带宽。
采用系统接口解析JSON数据
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
--------------------------------------------------------
private ArrayList<MediaItem> parseJson(String json) {
ArrayList<MediaItem> mediaItems = new ArrayList<>();
try {
JSONObject jsonObject = new JSONObject(json);//采用系统接口
JSONArray jsonArray = jsonObject.optJSONArray("trailers");
if (jsonArray != null && jsonArray.length() > 0){
for (int i = 0;i < jsonArray.length();i++){
JSONObject jsonObjectItem = (JSONObject) jsonArray.get(i);
if (jsonObjectItem != null){
MediaItem mediaItem = new MediaItem();
String movieName = jsonObjectItem.optString("movieName");//视频名字 name
mediaItem.setName(movieName);
String videoTitle = jsonObjectItem.optString("videoTitle");//视频描述 desc
mediaItem.setDesc(videoTitle);
String imageUrl = jsonObjectItem.optString("coverImg");//图片地址 imageUrl
mediaItem.setImageUrl(imageUrl);
String hightUrl = jsonObjectItem.optString("hightUrl");//高清影片地址 data
mediaItem.setData(hightUrl);
//把数据添加到集合
mediaItems.add(mediaItem);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return mediaItems;
}
采用Gson解析JSON数据
下载json-2.2.1.jar,将其导入到工程文件下的libs目录下,然后右键添加Add As Library作为库文件添加到app module中。
import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;
------------------------------------
private SearchBean parsedJson(String result) {
return new Gson().fromJson(result,SearchBean.class);//将Json数据解析成SearchBean类型
}
GsonFormat的使用
在网页中复制要解析的Json数据,然后自定义一个空的javaBean,就是一个空的类,在空白处右键-->Generate-->GsonFormat,将Json数据粘贴到弹出的对话框中,点击ok,就可以自动生成对应javaBean的语句,非常好用。
安装GsonFormat步骤:
1.Android studio
File->Settings..->Plugins-->Browse repositores..搜索GsonFormat
2.安装插件,重启android studio。