前一段时间被解析字符串折磨了一阵子,因为json出错,自己的马虎导致没有发现,就是怎么解析都解析不出来,所以今天做一些记录,当时是因为在json的js文件中有一个参数是在引号(")的外边的,我只是关注了下格式,格式没有错误,也有的是多了一对(),虽然格式没错,但是却把我当时要解析的数组变成了对象~~!
首先在解析json文件的时候,应该先看看格式是否正确,是否与自己的要解析的格式相符.FE: 想要的[{name:"abc",pic:"thispic",url:"www.weblog.blog.chinaunix.net"},{name:"def",pic:"thatpic",url:"www.weblog.blog.chinaunix.net"}]而实际的却是是{[...]}这样
其次,是要看看内容里是否合理,有没有造成格式问题.FE:想要的
[{name:"abc",pic:"thispic",url:"www.weblog.blog.chinaunix.net"},{name:"def",pic:"thatpic",url:"www.weblog.blog.chinaunix.net"}]而实际的却是
[{name:"abc",pic:"thispic",url:"www.weblog.blog.chinaunix.net"},{name:"def",pic:"thatpic",url:"www.weblog.blog.chinaunix.net"+fql0915}]
简单的时候可以看到,如果json多的时候就很难阅读,尤其悲剧的是我还是用txt看的
希望大家吸取教训啊
尽量用html 或者js 加一些工具 如editplus UE emacs vim等等 这样就容易发现错误
接下来开始说解析文件:commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar json-lib-2.2.3-jdk15.jar 解析这个jar包包含这些依赖 如果嫌它麻烦 也可以用Google的jar包google-gson-2.1-release 我简单的测试过,可以,复杂的有兴趣的可以研究下
下面是部分代码:
- String content = "文件的内容";
- System.out.println(content);
- JSONArray jsonarray = JSONArray.fromObject(content);
- for(int i=0;i<jsonarray.size();i++){
- JSONObject jsonObject = jsonarray.getJSONObject(i);
- MM mm = (MM)jsonObject.toBean(jsonObject,MM.class);
- Set<SM> smset = new HashSet<SM>();
- if(content.indexOf("sM")>0){//查看有没有sM的字符串
- JSONArray jsonArr = jsonObject.getJSONArray("sM");
- for(int j =0;j<jsonArr.size();j++){
- JSONObject jsonObj = jsonArr.getJSONObject(j);
- SM sm = (SM)jsonObj.toBean(jsonObj, SM.class);
- smset.add(sm);
- }
- mm.setSM(smset);
- mms.add(mm);
- }
-
-
- }
总之就是利用JSONObject或JSONArray来得到相应json文件中的对象或对象数组,在将得到的数组或对象转化成想要的bean,这个jar包也可以用来将已有的bean转化为json字符串,然后再用jibx dom4j等还可将数据转化为xml.Google的jar包还有个很安全的写法
- Gson gson = new GsonBuilder().create();/* new Gson(); */
- Type listType = new TypeToken<List<MM>>() {}.getType();
没有深入研究,个人比较懒~~
阅读(14870) | 评论(2) | 转发(0) |