最近工作中写了一个抓取第三方应用数据的程序,该数据格式为JSON。
刚开始在JSON解析时使用的是开源工具jackson,遇到了问题。例如:
{ "code": 200, "data": "{'v-soft-list':[{typecode:'zhuanbi',gametype:'赚币',count:5},{typecode:'dongzuo',gametype:'动作',count:12},{typecode:'maoxian',gametype:'冒险',count:14},{typecode:'xiuxian',gametype:'休闲',count:61},{typecode:'zhili',gametype:'智力',count:17},{typecode:'gaoxiao',gametype:'搞笑',count:6},{typecode:'celue',gametype:'策略',count:4},{typecode:'qipai',gametype:'棋牌',count:2}]}" }
上面这个格式的JSON,首先使用jackson将它转换成HashMap,然后获取data键的值,取出来是一个字符串,到这里都没有问题。然后继续,将data取出的字符串再次进行解析:
{'v-soft-list':[{typecode:'zhuanbi',gametype:'赚币',count:5},{typecode:'dongzuo',gametype:'动作',count:12},{typecode:'maoxian',gametype:'冒险',count:14},{typecode:'xiuxian',gametype:'休闲',count:61},{typecode:'zhili',gametype:'智力',count:17},{typecode:'gaoxiao',gametype:'搞笑',count:6},{typecode:'celue',gametype:'策略',count:4},{typecode:'qipai',gametype:'棋牌',count:2}]}
解析上面这个字符串时,发现这不是一个合法的json。又使用JSON校验工具检查了一下,果真提示非法,导致jackson也无法正常解析而抛出异常。但这又是别人的系统,不可能让人家修改数据格式,肿么办?
于是放弃了jackson,尝试了另一款json解析器:json-lib。也就是包名为org.json开头的那个json解析器。
解析过程:
JSONObject jsonObject = new JSONObject(category); JSONArray jsArray = jsonObject.getJSONArray("v-soft-list"); for(int i=0;i<typeArray.length();i++){ JSONObject jsObject = (JSONObject)typeArray.get(i); String typeCode = (String)jsObject.get("typecode"); //... }其中category就是那个不合法的json字符串。获取它的v-soft-list属性是一个数组类型,转换为JSONArray。数组中的每一个元素都是一个map,转换为JSONObject对象,之后就可以正常取值了。
总结:
在遇到不合法json的解析时,考虑使用json-lib。
但如果是标准格式的json解析,首选还是jackson,毕竟性能和易用性都比较高。
另外,由于jackson对于json的校验相当严格,稍有错误就会抛异常,所以如果遇到校验json格式的情况,也可以考虑使用jackson。
当然,json-lib的功能不仅限于解析json,详情请自己baidu。
希望对看到的人有所帮助,同时欢迎拍砖。
附:
json-lib:http://json-lib.sourceforge.net/usage.html (sourceforge.net又上不去了?)
JSON-lib使用:http://www.blogjava.net/caizh2009/archive/2009/08/29/293040.html
关于jackson的使用请见我的另一篇blog:http://shensy.iteye.com/blog/1717776
相关推荐
标题"\"c# 校验文本是否为合法json格式\""所涉及的主要知识点是使用C#进行JSON验证。以下将详细介绍如何实现这一功能: 1. **System.Text.Json库**:自C# .NET Core 3.0以来,微软引入了新的System.Text.Json库作为...
在调试过程中,可以使用`QJsonDocument::isValid()`检查JSON数据的合法性,并利用`QJsonDocument::toString()`方法将JSON数据转换为字符串,便于查看和调试。 总之,QT通过其丰富的类库为开发者提供了一套完整的...
4. 使用编程语言进行JSON解析的方法。 5. JSON验证和格式化。 6. 高级的JSON操作,如数据筛选、转换和导入导出。 这个压缩包可能包含了实现这些功能的代码、文档或应用程序,对于理解JSON和学习如何处理JSON数据会...
如果数据不合法,工具可能会抛出异常。 在开发过程中,这个精简的JSON解析工具可以帮助你更高效地处理JSON数据,提高开发效率,减少线上调试的时间。无论你是前端开发者,还是后端开发者,或者是从事数据分析工作,...
否则,如果抛出异常(如`JSONException`),说明字符串不符合JSON格式,方法返回`false`。 请注意,这种方法只能验证JSON对象,如果需要验证JSON数组,可以使用`JSONArray`类代替`JSONObject`。另外,虽然这种方法...
通过aop拦截获取json请求数据,对数据进行处理判断,如果不合法则抛出异常,配置全局异常处理类,在异常处理类中直接将处理结果返回调用处,减少每次在方法中解析json数据然后在判断,减少代码冗余
同时,确保输入的JSON字符串是合法的,否则解析会失败。另外,对于大型项目,为了性能考虑,可能需要考虑使用缓存或者预解析机制来优化JSON数据的读取。 总的来说,JSON是Objective-C网络编程中不可或缺的一部分,...
- null在JSON中是合法的,但在Java中,字段可能是不允许为null的,需要特殊处理。 通过以上内容,你应该对Java中解析和生成JSON有了基本的了解。在实际项目中,根据具体需求选择合适的JSON库,并熟练掌握其API,能...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在这个例子中,我们将探讨如何解析这种数据格式来获取中国的天气预报。...
- 当解析JSON时,如果数据不合法,`JSONObjectWithData:options:error:`会返回nil,并通过error参数提供错误信息。 - 解析JSON时要注意数据类型匹配,例如,JSON中的数字会被解析为NSNumber,而不是int或float等...
5. **安全解析**:在处理用户输入时,需要确保JSON字符串的合法性。`json::strict`可以用于严格模式解析,防止潜在的安全问题,如JSON注入攻击。 6. **错误处理**:在解析或生成JSON过程中可能会遇到错误,如格式不...
6. **错误处理与兼容性**:`net.sf.json`库也考虑到了错误处理,当JSON数据不合法时,会抛出相应的异常。同时,它可能已经对不同的JSON标准和规范进行了兼容性处理,确保在不同环境下都能正常工作。 总的来说,`...
3. **服务器端**:需要注意的是,这里的"a.json"并不是直接请求一个JSON文件,而是指一个接口路径,服务器应该在这个路径上提供JSON数据。服务器端的实现取决于你使用的后端技术,例如Node.js、PHP、Python等。 4. ...
JSONView可以检查字符串是否符合JSON的结构,如是否存在未闭合的大括号、引号,键值对是否正确配对等,如果输入的内容不是合法的JSON,JSONView通常会给出错误提示。 使用JSONView的主要步骤如下: 1. 安装插件:...
C语言本身并不直接支持JSON解析,因此我们需要借助第三方库或者自定义函数来实现。`Cjson`标签暗示了我们可能使用了一个C语言编写的JSON处理库,但具体是哪个库并未明确指出。不过,根据描述中的"json_checker()...
这些函数会逐个解析输入的JSON字符串,并在发现不符合规范的地方抛出错误。 `main.c`则是应用的入口点,它调用`JSON_checker`库中的函数处理用户输入的JSON字符串。在实际使用中,`main.c`可能会包含读取文件内容、...
此外,可能还支持自定义缩进量、错误检查以及对不合法JSON的修复等功能。 “JsonView”是压缩包子文件的文件名称,这可能是指一个特定的JSON查看器或插件,例如在浏览器环境中使用的Chrome扩展或其他类似的工具。...
确保解析器符合JSON规范,能正确处理各种合法和非法JSON输入。 6. **性能优化**:考虑到STM32的计算能力,解析程序可能采用了位操作、循环展开等技巧提高运行速度,同时尽可能减少I/O操作,以适应实时性要求高的...
总之,JSON解析工具是开发人员不可或缺的辅助工具,尤其对于处理大量JSON数据的项目来说。通过单机版的“json解析工具”,用户可以在本地环境中便捷地完成JSON数据的解析、验证和管理,从而提升工作效率,确保数据的...