之前一直使用Java自带的JSONObject,JSONArray来进行解析,在JSON嵌套不多,数据不大的时候还是不错的。但是对于大量的JSON数据来说,效率就比较低了。Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用了面向对象的思想,提高了JSON解析的效率。
需要解析的JSON数据如下(JSON数据我保存为"languages.json",放在assets目录下。需要去下一个GSON.jar,放到libs文件夹下):
- {
- "language": [
- {
- "id": 1,
- "name": "Java",
- "ide": "Eclipse"
- },
- {
- "id": 2,
- "name": "C++",
- "ide": "Visual Studio"
- }
- ]
- }
同时需要新建一个类,一一对应需要解析的属性值,如id/name/ide.(这里就用到了面向对象的思想)。新建Language.java如下:
- 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,直接上代码:
- public class MainActivity extends Activity {
-
- private TextView text;
- private String jsonString;
-
- @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);
- String line;
- StringBuilder stringBuilder = new StringBuilder();
- while ((line = bufferedReader.readLine()) != null) {
- stringBuilder.append(line);
- }
- jsonString = stringBuilder.toString();
- bufferedReader.close();
- inputStreamReader.close();
-
- parseJSON(jsonString);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
-
-
- private void parseJSON(String json) {
-
- try {
- Gson gson = new Gson();
- Type type = new TypeToken<ArrayList<Language>>() {
- }.getType();
- JSONObject root = new JSONObject(json);
- 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);
- 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 。欢迎大家访问!