您的位置:首页 > 移动开发 > Android开发

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 。欢迎大家访问!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: