Android中使用GSON包解析JSON数据(简单JSON)
2016-01-28 16:44
756 查看
之前一直使用Java自带的JSONObject,JSONArray来进行解析,在JSON嵌套不多,数据不大的时候还是不错的。但是对于大量的JSON数据来说,效率就比较低了。Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用了面向对象的思想,提高了JSON解析的效率。
需要解析的JSON数据如下(JSON数据我保存为"languages.json",放在assets目录下。需要去下一个GSON.jar,放到libs文件夹下):
[java] view
plain copy
print?
{
"language": [
{
"id": 1,
"name": "Java",
"ide": "Eclipse"
},
{
"id": 2,
"name": "C++",
"ide": "Visual Studio"
}
]
}
同时需要新建一个类,一一对应需要解析的属性值,如id/name/ide.(这里就用到了面向对象的思想)。新建Language.java如下:
[java] view
plain copy
print?
public class Language {
private String id;
private String name;
private String ide;
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getIde() {
return ide;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setIde(String ide) {
this.ide = ide;
}
}
最后主要使用GSON.jar中的GSON类进行解析,把解析结果显示在TextView,直接上代码:
[java] view
plain copy
print?
public class MainActivity extends Activity {
private TextView text;
private String jsonString;//存放JSON字符串;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.id_text);
try {
InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//使用BufferReader读取输入流中的数据;
String line;
StringBuilder stringBuilder = new StringBuilder();//所有读取的json放到StringBuilder中,这里也可以使用StringBuffer,效果一样;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
jsonString = stringBuilder.toString();
bufferedReader.close();//按相反的顺序关闭流;
inputStreamReader.close();
parseJSON(jsonString);//调用使用GSON解析的方法;
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用该方法用GSON进行解析;
*
* @param json
*/
private void parseJSON(String json) {
try {
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<Language>>() {
}.getType();
JSONObject root = new JSONObject(json);//这个root就是根对象,就是最外面的那个{}花括号;
ArrayList<Language> language = gson.fromJson(root.getString("language"), type);
int len = language.size();//获取该数组中有多少个子对象;
for (int i = 0; i < len; i++) {
Language lan = language.get(i);//获取数组中的第i个对象;
text.append(lan.getId() + " " + lan.getName() + " " + lan.getIde());
text.append("\n");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
程序运行后的显示效果如下:
。
至此,已经成功解析出JSON数据。
附GSON包下载地址:http://pan.baidu.com/s/1mgw1PUC
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
需要解析的JSON数据如下(JSON数据我保存为"languages.json",放在assets目录下。需要去下一个GSON.jar,放到libs文件夹下):
[java] view
plain copy
print?
{
"language": [
{
"id": 1,
"name": "Java",
"ide": "Eclipse"
},
{
"id": 2,
"name": "C++",
"ide": "Visual Studio"
}
]
}
同时需要新建一个类,一一对应需要解析的属性值,如id/name/ide.(这里就用到了面向对象的思想)。新建Language.java如下:
[java] view
plain copy
print?
public class Language {
private String id;
private String name;
private String ide;
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getIde() {
return ide;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setIde(String ide) {
this.ide = ide;
}
}
最后主要使用GSON.jar中的GSON类进行解析,把解析结果显示在TextView,直接上代码:
[java] view
plain copy
print?
public class MainActivity extends Activity {
private TextView text;
private String jsonString;//存放JSON字符串;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.id_text);
try {
InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//使用BufferReader读取输入流中的数据;
String line;
StringBuilder stringBuilder = new StringBuilder();//所有读取的json放到StringBuilder中,这里也可以使用StringBuffer,效果一样;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
jsonString = stringBuilder.toString();
bufferedReader.close();//按相反的顺序关闭流;
inputStreamReader.close();
parseJSON(jsonString);//调用使用GSON解析的方法;
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用该方法用GSON进行解析;
*
* @param json
*/
private void parseJSON(String json) {
try {
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<Language>>() {
}.getType();
JSONObject root = new JSONObject(json);//这个root就是根对象,就是最外面的那个{}花括号;
ArrayList<Language> language = gson.fromJson(root.getString("language"), type);
int len = language.size();//获取该数组中有多少个子对象;
for (int i = 0; i < len; i++) {
Language lan = language.get(i);//获取数组中的第i个对象;
text.append(lan.getId() + " " + lan.getName() + " " + lan.getIde());
text.append("\n");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
程序运行后的显示效果如下:
。
至此,已经成功解析出JSON数据。
附GSON包下载地址:http://pan.baidu.com/s/1mgw1PUC
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
相关文章推荐
- Android中程序与Service交互的方式——交互方式
- 解决Android Studio中某一个Module不能启动的问题
- android工程导出jar包的方法
- android 关闭软键盘
- android 弹出全局加载等待动画
- Android Studio中的Project和Module是个什么鬼?
- android 时间戳相关
- Android中如何解析JSON数据
- Android中如何解析XML数据
- android studio设置内存
- Android开发之启动页面Splash Screen
- android utf8转换
- Android Studio上的几个插件
- android 友盟社会化分享
- 获取新浪微博开发时的MD5签名
- Android Studio导入github下载的工程
- Android中设置ListView内容刷新问题
- Android-PullToRefresh onRefreshComplete()失效问题
- android 关于Location of the Android SDK has not been setup in the preferences的解决方法
- android插值器简单使用