zoukankan      html  css  js  c++  java
  • Android中解析JSON格式数据常见方法合集

      待解析的JSON格式的文件如下:

        [{"id":"5", "version":"1.0", "name":"xiaowang"},

        {"id":"10", "version":"2.0", "name":"lisi"}]

    一、使用JSONObject来解析JSON数据

      官方提供的,所有不需要导入第三方jar包;直接上代码,如下:

     1 //方法一:使用JSONObject
     2 private void parseJSONWithJSONObject(String JsonData) {
     3     try
     4     {
     5         JSONArray jsonArray = new JSONArray(jsonData);
     6         for (int i=0; i < jsonArray.length(); i++)    {
     7             JSONObject jsonObject = jsonArray.getJSONObject(i);
     8             String id = jsonObject.getString("id");
     9             String name = jsonObject.getString("name");
    10             String version = jsonObect.getString("version");
    11 
    12             System.out.println("id" + id + ";name" + name + ";version" + version);
    13         }
    14     }
    15     catch (Exception e)
    16     {
    17         e.printStackTrace();
    18     }
    19 }

      步骤解读:

         定义一个JSON数组,用于将服务器返回的数据传入到一个JSONArray对象中; 然后循环遍历这个JSONArray,

       从中取出每一个元素JSONObject对象),接下来只需调用getString()方法即可将数据取出。

    二、使用GSON

      使用该方法解析JSON数据,首先需要添加GSON的jar包;下载地址是:http://download.csdn.net/detail/a924571572/5824225

        需要导入的jar包如图: 

      下面是核心代码

    //方法二:使用GSON
    private void parseJSONWithGSON(String JsonData) {
        Gson gson = new Gson();
        List<App> applist = gson.fromJson(jsonData,
            new TypeToken<List<App>>() {}.getType());
        for(App app : applist) {
             System.out.println("id" + app.getId() + ";name" + app.getName() + ";version" + app.getVersion());
        }
    }

      步骤解读:

       根据JSON数据内容需要定义一个类,用存放数据,如App类:

    public class App {
        private String id;
        private String name;
        private String version;
    
        public String getId() {
            return id;
        }  
        
        public void setId(String id) {
            this.id = id;
        }
      
        //......
    }

         如只有一组数据,则可以直接调用如下代码     

    GSON gson = new GSON();
    App app = gson.fromJson(jsonData, App.class);

         如果有多组数据,则需要借助TypeToken将期望解析成的数据类型传入fromJson()方法中:

    List<App> app = gson.fromJson(jsonData, new TypeToken<<List<App>>> ().getType());

        之后直接使用App对象的方法,如:getId、getName....即可获取数据

      补充

       TypeToken是什么呢?

        TypeToken的使用非常简单,如上面的代码,只要将需要获取类型的泛型类作为TypeToken的泛型参数构造一个匿名的子类,就可以通过getType()方法获取到我们使用的泛型类的泛型参数类型。

    三、使用Jackson

      第三方的工具知道该怎么处理了吧,jar包的下载地址:http://wiki.fasterxml.com/JacksonDownload

        其中需要使用到:

          jackson-databind.jar   核心包(必须),提供基于“流模式”解析的APIJsonPaser(json流读取),JsonGenerator(json流输出)】

            jackson-annotations.jar   数据绑定包(可选),提供基于“对象绑定”和“树模型”相关API。【ObjectMapper,JsonNode(树节点)】

          jackson-core.jar  注解包(可选),提供注解功能。

       核心方法

    public static void parseJSONWithJackson(String jsonData) {  
        ObjectMapper mapper = new ObjectMapper();  
        try {  
             App app = mapper.readValue(jsonData, App.class);
         System.out.println("id" + app.getId() + ";name" + app.getName() + ";version" + app.getVersion());
       } catch (JsonParseException e) {
         e.printStackTrace();
      }
    catch (JsonMappingException e) {
         e.printStackTrace();
      }
    catch (IOException e) {
         e.printStackTrace();
       }
    }

    四、使用Fastjson
      不多说,直接上jar包下载地址:http://download.csdn.net/download/finaljia/5293875

      核心代码

    JSONArray jarr = JSONArray.parseArray(jsonData); //JSON.parseArray(jsonStr);  
    for (Iterator iterator = jarr.iterator(); iterator.hasNext(); ) {  
        JSONObject job = (JSONObject)iterator.next();  
        String id = job.get("id").toString();
        String name = job.get("name").toString();
        String version = job.get("version").toString();
    System.out.println(
    "id" + id + ";name" + name + ";version" +
    version); }
  • 相关阅读:
    爬虫系列---多线程爬取实例
    爬虫系列---selenium详解
    爬虫系列二(数据清洗--->bs4解析数据)
    爬虫系列二(数据清洗--->xpath解析数据)
    爬虫系列二(数据清洗--->正则表达式)
    爬虫实例系列一(requests)
    selenium PO模式
    setUp和tearDown及setUpClass和tearDownClass的用法及区别
    chromeIEFirefox驱动下载地址
    HTTP通信机制
  • 原文地址:https://www.cnblogs.com/jesonjason/p/5558451.html
Copyright © 2011-2022 走看看