`

关于解析不合法JSON的方法

 
阅读更多

最近工作中写了一个抓取第三方应用数据的程序,该数据格式为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格式\""所涉及的主要知识点是使用C#进行JSON验证。以下将详细介绍如何实现这一功能: 1. **System.Text.Json库**:自C# .NET Core 3.0以来,微软引入了新的System.Text.Json库作为...

    QT,解析和写json文件

    在调试过程中,可以使用`QJsonDocument::isValid()`检查JSON数据的合法性,并利用`QJsonDocument::toString()`方法将JSON数据转换为字符串,便于查看和调试。 总之,QT通过其丰富的类库为开发者提供了一套完整的...

    json离线解析.zip

    4. 使用编程语言进行JSON解析的方法。 5. JSON验证和格式化。 6. 高级的JSON操作,如数据筛选、转换和导入导出。 这个压缩包可能包含了实现这些功能的代码、文档或应用程序,对于理解JSON和学习如何处理JSON数据会...

    Json解析工具

    如果数据不合法,工具可能会抛出异常。 在开发过程中,这个精简的JSON解析工具可以帮助你更高效地处理JSON数据,提高开发效率,减少线上调试的时间。无论你是前端开发者,还是后端开发者,或者是从事数据分析工作,...

    java验证字符串是否符合json格式

    否则,如果抛出异常(如`JSONException`),说明字符串不符合JSON格式,方法返回`false`。 请注意,这种方法只能验证JSON对象,如果需要验证JSON数组,可以使用`JSONArray`类代替`JSONObject`。另外,虽然这种方法...

    springmvc JSON解析全局异常处理

    通过aop拦截获取json请求数据,对数据进行处理判断,如果不合法则抛出异常,配置全局异常处理类,在异常处理类中直接将处理结果返回调用处,减少每次在方法中解析json数据然后在判断,减少代码冗余

    JSON头文件下载 用于objective-c中的json解析

    同时,确保输入的JSON字符串是合法的,否则解析会失败。另外,对于大型项目,为了性能考虑,可能需要考虑使用缓存或者预解析机制来优化JSON数据的读取。 总的来说,JSON是Objective-C网络编程中不可或缺的一部分,...

    java 解析 生成 json

    - null在JSON中是合法的,但在Java中,字段可能是不允许为null的,需要特殊处理。 通过以上内容,你应该对Java中解析和生成JSON有了基本的了解。在实际项目中,根据具体需求选择合适的JSON库,并熟练掌握其API,能...

    解析中国天气网的Json数据

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。在这个例子中,我们将探讨如何解析这种数据格式来获取中国的天气预报。...

    iphone开发json解析详细讲解

    - 当解析JSON时,如果数据不合法,`JSONObjectWithData:options:error:`会返回nil,并通过error参数提供错误信息。 - 解析JSON时要注意数据类型匹配,例如,JSON中的数字会被解析为NSNumber,而不是int或float等...

    TCL JSON 必须文件

    5. **安全解析**:在处理用户输入时,需要确保JSON字符串的合法性。`json::strict`可以用于严格模式解析,防止潜在的安全问题,如JSON注入攻击。 6. **错误处理**:在解析或生成JSON过程中可能会遇到错误,如格式不...

    json net.sf.json

    6. **错误处理与兼容性**:`net.sf.json`库也考虑到了错误处理,当JSON数据不合法时,会抛出相应的异常。同时,它可能已经对不同的JSON标准和规范进行了兼容性处理,确保在不同环境下都能正常工作。 总的来说,`...

    JS获取json文件内容并处理参考

    3. **服务器端**:需要注意的是,这里的"a.json"并不是直接请求一个JSON文件,而是指一个接口路径,服务器应该在这个路径上提供JSON数据。服务器端的实现取决于你使用的后端技术,例如Node.js、PHP、Python等。 4. ...

    JsonView json格式化

    JSONView可以检查字符串是否符合JSON的结构,如是否存在未闭合的大括号、引号,键值对是否正确配对等,如果输入的内容不是合法的JSON,JSONView通常会给出错误提示。 使用JSONView的主要步骤如下: 1. 安装插件:...

    C语言检测字符串是否为json字符串

    C语言本身并不直接支持JSON解析,因此我们需要借助第三方库或者自定义函数来实现。`Cjson`标签暗示了我们可能使用了一个C语言编写的JSON处理库,但具体是哪个库并未明确指出。不过,根据描述中的"json_checker()...

    c语言json格式校验代码

    这些函数会逐个解析输入的JSON字符串,并在发现不符合规范的地方抛出错误。 `main.c`则是应用的入口点,它调用`JSON_checker`库中的函数处理用户输入的JSON字符串。在实际使用中,`main.c`可能会包含读取文件内容、...

    最好的json格式化工具

    此外,可能还支持自定义缩进量、错误检查以及对不合法JSON的修复等功能。 “JsonView”是压缩包子文件的文件名称,这可能是指一个特定的JSON查看器或插件,例如在浏览器环境中使用的Chrome扩展或其他类似的工具。...

    C语言自编json封包解析程序STM32.rar

    确保解析器符合JSON规范,能正确处理各种合法和非法JSON输入。 6. **性能优化**:考虑到STM32的计算能力,解析程序可能采用了位操作、循环展开等技巧提高运行速度,同时尽可能减少I/O操作,以适应实时性要求高的...

    json解析工具

    总之,JSON解析工具是开发人员不可或缺的辅助工具,尤其对于处理大量JSON数据的项目来说。通过单机版的“json解析工具”,用户可以在本地环境中便捷地完成JSON数据的解析、验证和管理,从而提升工作效率,确保数据的...

Global site tag (gtag.js) - Google Analytics