Android项目之JSON解析(3种解析技术详解)

Android项目之JSON解析(3种解析技术详解),第1张

概述一、用Android原生技术解析JSON:特点:很麻烦,对于复杂的json数据解析很容易出错!(不推荐使用)1、解析JSON对象的API:JsonObjectJSONObject(String json);将Json字符串解析成Json对象;XxxgetXxx(Stringname);根据name在json对象中得到相应的value。示例代码:(1)获取或创建JSON数据(为了

一、用AndroID原生技术解析JsON:

特点:很麻烦,对于复杂的Json数据解析很容易出错!(不推荐使用)

1、解析JsON对象的API:JsonObject

JsONObject(String Json);将Json字符串解析成Json对象;

XxxgetXxx(String name) ;根据name在Json对象中得到相应的value。

示例代码:

(1)获取或创建JsON数据(为了方便,这里就直接创建了):


[java] vIEw plain copy
String Json = "{\n" +  
               "\t\"ID\":2, \"name\":\"金鱼\", \n" +  
               "\t\"price\":12.3, \n" +  
               "\t\"imagePath\":\"@R_403_6822@://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +  
               "}\n";  
  
       ShopInfo shopInfo = null;  
(2)解析Json对象:


[java] vIEw plain copy
 try {  
            JsONObject JsonObject = new JsONObject(Json);  
//            int ID = JsonObject.getInt("ID");  
            int ID1 = JsonObject.optInt("ID");  
  
            String name = JsonObject.optString("name");  
  
            double price = JsonObject.optDouble("price");  
  
            String imagePath = JsonObject.optString("imagePath");  
  
            // 封装Java对象  
            shopInfo = new ShopInfo(ID1, name, price, imagePath);  
  
        } catch (JsONException e) {  
            e.printstacktrace();  
        }  
注意:这里记得要加try_catch异常处理。

(3)创建JavaBean类,并显示解析后的数据:


[java] vIEw plain copy
tv_native_last.setText(shopInfo.toString());  


2、解析Json数组的API:JsONArray
JsONArray(String Json);将Json字符串解析成Json数组;

int length();得到Json数组中元素的个数;

XxxgetXxx(int s) ;根据下标得到Json数组中对应的元素数据。

示例代码:

(1)获取或创建JsON数据:


[java] vIEw plain copy
String Json = "[\n" +  
               "    {\n" +  
               "        \"ID\": 1,\n" +  
               "        \"imagePath\": \"@R_403_6822@://blog.csdn.net/qq_29269233/f1.jpg\",\n" +  
               "        \"name\": \"金鱼1\",\n" +  
               "        \"price\": 12.3\n" +  
               "    },\n" +  
               "    {\n" +  
               "        \"ID\": 2,\n" +  
               "        \"imagePath\": \"@R_403_6822@://blog.csdn.net/qq_29269233/f2.jpg\",\n" +  
               "        \"name\": \"金鱼2\",\n" +  
               "        \"price\": 12.5\n" +  
               "    }\n" +  
               "]";  

 

(2)解析Json数组:


[java] vIEw plain copy
try {  
            JsONArray JsonArray = new JsONArray(Json);  
  
            for (int i = 0; i < JsonArray.length(); i++) {  
                JsONObject JsonObject = JsonArray.getJsONObject(i);  
  
                if (JsonObject != null) {  
                    int ID = JsonObject.optInt("ID");  
  
                    String name = JsonObject.optString("name");  
  
                    double price = JsonObject.optDouble("price");  
  
                    String imagePath = JsonObject.optString("imagePath");  
  
                    // 封装Java对象  
                    ShopInfo shopInfo = new ShopInfo(ID, name, price, imagePath);  
  
                    shops.add(shopInfo);  
                }  
            }  
        } catch (JsONException e) {  
            e.printstacktrace();  
        }  

(3)显示解析后的数据:

[java] vIEw plain copy
tv_native_last.setText(shops.toString());  

到此为止,这就是用原生的技术去解析Json了,至于复杂特殊的Json数据怎样去解析,也是大同小异了,一层一层解析就对了!

 

二、用Gson框架技术解析JsON:

特点:解析没那么麻烦,代码量简洁,可以很方便地解析复杂的Json数据,而且谷歌官方也推荐使用。

先放出jar包的下载地址:@R_403_6822@s://mvnrepository.com/artifact/com.Google.code.gson/gson

 


如过用AndroID Studio做开发的话,可以通过Gradle,直接添加依赖,不用下载jar包,很方便,如下:

 

 

 


1、用Gson解析JsON对象:

(1)将gson的jar包导入到项目libs目录下,或者直接通过Gradle添加依赖:


[java] vIEw plain copy
compile group: 'com.Google.code.gson', name: 'gson', version: '2.8.0'  

 

(2)创建Gson对象:

[java] vIEw plain copy
Gson gson = new Gson();  

(3)通过创建的Gson对象调用fromJson()方法,返回该Json数据对象的Java对象;

[java] vIEw plain copy
ShopInfo shopInfo = gson.fromJson(Json, ShopInfo.class);  

 

注意要记得创建对象的JavaBean类;要求Json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!


示例代码如下:

[java] vIEw plain copy
// 1 获取或创建JsON数据  
       String Json = "{\n" +  
               "\t\"ID\":2, \"name\":\"金鱼\", \n" +  
               "\t\"price\":12.3, \n" +  
               "\t\"imagePath\":\"@R_403_6822@://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +  
               "}\n";  
  
       // 2 解析JsON数据  
       Gson gson = new Gson();  
  
       ShopInfo shopInfo = gson.fromJson(Json, ShopInfo.class);  
  
       // 3 展示数据  
       tv_gson_last.setText(shopInfo.toString());  

2、用Gson解析JsON数组:
(1)(2)与上面相同,要用Gson就要先添加依赖,然后创建Gson对象;

(3)通过创建的Gson对象调用fromJson()方法,返回该Json数据对应的Java集合。

这里但强调一下:要记得创建对象的JavaBean类;要求Json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!


示例代码如下:


[java] vIEw plain copy
// 1 获取或创建JsON数据  
       String Json = "[\n" +  
               "    {\n" +  
               "        \"ID\": 1,\n" +  
               "        \"imagePath\": \"@R_403_6822@://blog.csdn.net/qq_29269233/f1.jpg\",\n" +  
               "        \"name\": \"金鱼1\",\n" +  
               "        \"price\": 12.3\n" +  
               "    },\n" +  
               "    {\n" +  
               "        \"ID\": 2,\n" +  
               "        \"imagePath\": \"@R_403_6822@://blog.csdn.net/qq_29269233/f2.jpg\",\n" +  
               "        \"name\": \"金鱼2\",\n" +  
               "        \"price\": 12.5\n" +  
               "    }\n" +  
               "]";  
  
       // 2 解析JsON数据  
       Gson gson = new Gson();  
  
       List<ShopInfo> shops = gson.fromJson(Json, new Typetoken<List<ShopInfo>>() {  
       }.getType());  
  
       // 3 展示数据  
       tv_gson_last.setText(shops.toString());  

还是那句话,复杂特殊的都是大同小异,理解了方法就没问题了!
3、Gson还可以将Java对象、Java对象的List 转换为Json字符串{};有兴趣的就去研究一下哈。

 

三、用FastJson框架技术解析JsON:

特点:FastJson是用Java语言编写的高性能功能完善的JsON库。它采用了一种“假定有序、快速匹配”的算法,

把JsON Parse的性能提升到极致,是目前Java语言中最快的JsON库。

FastJson是阿里巴巴开源框架,已经开源到github上了,地址为:@R_403_6822@s://github.com/alibaba/fastJson

 

 

 

在github上,我还专门留意了这个,哈哈,gson和fastJson比起来,gson就是“乌龟”

 


要使用FastJson,也是想Gson一样,先导入jar包,或者在Gradle中添加依赖:


[java] vIEw plain copy
compile 'com.alibaba:fastJson:1.1.55.androID'  

添加好依赖后就可以使用FastJson了!

1、用FastJson解析JsON对象:

利用FastJson的JsON调用parSEObject()方法,获取转换后的Java对象。

注意要记得创建对象的JavaBean类;要求Json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!


示例代码:


[java] vIEw plain copy
// 1 获取或创建Json数据  
       String Json = "{\n" +  
               "\t\"ID\":2, \"name\":\"金鱼\", \n" +  
               "\t\"price\":12.3, \n" +  
               "\t\"imagePath\":\"@R_403_6822@://blog.csdn.net/qq_29269233/L05_Server/images/f1.jpg\"\n" +  
               "}\n";  
  
       // 2 解析JsON数据  
       ShopInfo shopInfo = JsON.parSEObject(Json, ShopInfo.class);  
  
       // 3 显示数据  
       tv_fastJson_last.setText(shopInfo.toString());  

 

2.用FastJson解析JsON数组:
利用FastJson的JsON调用parseArray()方法,获取转换后的Java集合。

这里但强调一下:要记得创建对象的JavaBean类;要求Json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!


示例代码:


[java] vIEw plain copy
// 1 获取或创建Json数据  
       String Json = "[\n" +  
               "    {\n" +  
               "        \"ID\": 1,\n" +  
               "        \"imagePath\": \"@R_403_6822@://blog.csdn.net/qq_29269233/f1.jpg\",\n" +  
               "        \"name\": \"金鱼1\",\n" +  
               "        \"price\": 12.3\n" +  
               "    },\n" +  
               "    {\n" +  
               "        \"ID\": 2,\n" +  
               "        \"imagePath\": \"@R_403_6822@://blog.csdn.net/qq_29269233/f2.jpg\",\n" +  
               "        \"name\": \"金鱼2\",\n" +  
               "        \"price\": 12.5\n" +  
               "    }\n" +  
               "]";  
  
      // 2 解析JsON数据  
       List<ShopInfo> shopInfos = JsON.parseArray(Json, ShopInfo.class);  
  
       // 3 显示数据  
       tv_fastJson_last.setText(shopInfos.toString());  

3、同样FastJson也可以将Java对象、Java对象的List 转换为Json字符串{};有兴趣的就去研究一下哈。

总结

以上是内存溢出为你收集整理的Android项目之JSON解析(3种解析技术详解)全部内容,希望文章能够帮你解决Android项目之JSON解析(3种解析技术详解)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存