Android: JSON数据解析--JSONlib与org.JSON的冲突

新注册了这个blog,正好这两天学写Android,需要解析本地的JSON文件,google一搜看到JSONlib这玩意儿挺靠谱,就大刀阔斧下了相关依赖包干了起来,没想到这下掉进了一个深坑,网上也查不到原因,在血海里翻腾了两天,如今好不容易爬了出来,与君分享,也作为开篇之作,不足之处还望指正。

 

对于初次解析JSON文件的童鞋可能会上网查找解析JSON文件的方法,于是网上有诸如JSONLIB, FASTJSON, GSON等方式,于是看的眼花撩乱。

 

其实。。我想说,Android自带的org.json包完全可以完成这个任务。。没必要去下载那些外部包

 

更坑的是,JSONLIB和Android自带的org.json包是冲突的。。which means, 你如果在java的开发环境下使用JSONLIB,完全没问题,不过你如果用Android的开发环境,不好意思,会报错

 

Error Message: AndroidRuntime java.lang.NoClassDefFoundError: Failed resolution of :Lnet/......JSONArray

这个原因完全是因为JSONLIB和org.JSON在包的命名上存在冲突 (当时我查的昏天黑地,反复纠结,在Java项目下用的好好地JSONLIB,为什么一放到Android就不行了呢,真是个大坑)

 

其实,JSONLIB与org.JSON的语法类似,

除了在新建对象时有所不同

JSONArray ja = new JSONArray(res);       org.JSON

 

JSONArray ja = new JSONArray();            JSONLIB

ja.from(res)               

在实际使用时两者几乎没有区别 e.g.

ja.getJb().getJSONArray("comments").getJSONObject(j).getString("time_created").toString()

 

 1 import java.io.InputStream;
 2 
 3 import org.apache.http.util.EncodingUtils;
 4 import org.json.JSONArray;
 5 import android.content.Context;
 6 import com.example.test.R;
 7 
 8 public class InitJson{
 9     public  String sJsonResource;
10     public  JSONArray ja;
11     public  void init(Context context) {
12         try {
13             //读取JSON文件
14             InputStream in = context.getResources().openRawResource(
15                     R.raw.community);
16             int length = in.available();
17             byte[] buffer = new byte[length];
18             in.read(buffer);
19             sJsonResource = EncodingUtils.getString(buffer, "BIG5");
20             in.close();
21             ja = new JSONArray(sJsonResource);
22             in.close();
23             for (int i = 0; i < ja.length(); ++i) {
24                 ja.getJSONObject(i).getString("time_created").toString();
25             }
26         } catch (Exception e) {
27             e.printStackTrace();
28         }
29 
30     }
31 }

 

 

Last but no least

 

压根没必要去用外部库,Android自带的org.json就能解决你的一切关于JSON文件解析的问题,而且,并不复杂!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。