由于Hibernate中好多实体类都级联关系,也就是某个类,出现了别的类的引用对象充当属性。那么这样的话用JSON来进行处理会出现嵌套的异常:net.sf.json.JSONException: There is a cycle in the hierarchy异常。
在处理这个错误之前先看看普通的JSON处理数据示例
TProcessInfoDAO dao = new TProcessInfoDAO();
List<TProcessInfo> orgData = dao.findAll();
JSONArray array=JSONArray.fromObject(orgData);
String json=array.toString();
System.out.println(json);
这样的处理方式中要求TProcessInfoDAO类所有属性必须是普通属性,不包含引用按对象
如果包含引用对象一般需要做一下配置过滤引用属性,这样JSON处理就能通过:这种是不会输出引用对象的
TProcessInfoDAO dao = new TProcessInfoDAO();
List<TProcessInfo> orgData = dao.findAll();
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
//配置你可能出现递归的属性
if (name.equals("TProcessInfos") || name.equals("TProcessInfo")) {
return true;
} else {
return false;
}
}
});
//调用ExtHelper将你的JSONConfig传递过去
JSONArray JsonArr=JSONArray.fromObject(orgData, config);
String jsonstr=JsonArr.toString();
还有一种处理方式,这种会输出引用对象
设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环,省事但是数据过于复杂的话会引起数据溢出或者效率低下。
TProcessInfoDAO dao = new TProcessInfoDAO();
List<TProcessInfo> orgData = dao.findAll();
JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//调用ExtHelper将你的JSONConfig传递过去
JSONArray JsonArr=JSONArray.fromObject(orgData, config);
String jsonstr=JsonArr.toString();
System.out.println(jsonstr);
分享到:
相关推荐
如果需要解析的数据间存在级联关系,而互相嵌套引用,在hibernate中极容易嵌套而抛出net.sf.json.JSONException: There is a cycle in the hierarchy异常。
6. **错误处理**:在处理JSON时,需要捕获JSONException,这是一个在解析、序列化或验证JSON时可能会抛出的异常。 7. **与其他数据类型转换**:JSONObject支持与Java基本类型、集合、Map等之间的转换,提供便利的...
- **异常处理**:在转换过程中,可能会遇到JSON格式错误、字段不匹配等问题,应捕获并处理`JSONException`。 以上就是使用`net.sf.json.JSONObject`进行JSON操作的基本步骤和进阶技巧。在实际开发中,你可能还需要...
在编程过程中,我们可能会遇到各种异常,其中"JSONException: expect ‘:’ at 0, actual =" 是一个典型的Fastjson库在解析JSON时抛出的异常。Fastjson是阿里巴巴提供的一款高性能的JSON解析和生成库,它广泛应用于...
7. **错误处理**:当解析JSON字符串或生成JSON对象时,如果遇到问题,`net.sf.json`会抛出异常,如`JSONException`,帮助开发者定位并解决问题。 总之,`net.sf.json`是一个强大的Java JSON处理库,它提供了一整套...
3.1.0+hibernate-distribution-3.6.8+JSON+MySQL+Annotation,并且对Dao和Service进行了封装,内含.jar包,并且解决了一对多双向关联的could not initialize proxy - no Session错误,同时解决了……invoked on ...
`org.json`库的核心类主要包括`JSONObject`、`JSONArray`、`JSONString`、`JSONTokener`和`JSONException`等。以下将详细阐述这些类的功能和使用方法: 1. **JSONObject**: `JSONObject`是表示JSON对象的类,它以...
此外,还有`JSONException`异常类用于处理解析和序列化过程中出现的错误,以及`JSONStringer`和`JSONWriter`用于更精细的JSON构建。 在给定的压缩包文件中,除了`json.jar`之外,还包含了其他几个与JSON处理相关的...
3. **JSONException**: 这是处理JSON时抛出的异常类,通常当JSON格式错误或者解析出错时会抛出。 4. **JSONStringer**: 提供了一种构建JSON字符串的方法,通过调用一系列的方法,可以构造出复杂的JSON结构。 5. **...
5. **JSONException**:当JSON操作出现错误时抛出的异常,如解析错误、无效的JSON格式等。 在2017.10.18这个版本中,可能包含了对JSON规范的更新、性能优化、bug修复以及新功能的添加。具体更新内容可以通过查看该...
6. **错误处理**:`JSONException` 是`org.json`库中的异常类,当解析JSON数据时遇到问题(如格式错误、键不存在等)时会抛出此异常。在使用`get()`、`opt()`等方法时,应捕获并处理此类异常。 7. **其他辅助类**:...
7. **错误处理**:库中的异常类如`JSONException`用于处理解析错误和运行时问题,帮助开发者定位和修复代码中的错误。 在实际使用中,开发者通常会将`net.sf.json`库的jar包添加到项目的类路径中,然后通过import...
除了`JSONObject`,`org.json`包还提供了其他类,如`JSONArray`用于处理JSON数组,`JSONStringer`和`JSONWriter`用于构建复杂的JSON结构,以及`JSONException`用于捕获处理JSON时可能出现的异常。这些工具类使得...
4. **JSONException**:当JSON操作过程中出现错误时抛出的异常,比如解析错误、类型不匹配等。 5. **JSONStringer** 和 **JSONWriter**:这两个类用于构建复杂的JSON结构,提供了更灵活的API来构造JSON文本。 6. *...
5. **错误处理**:库应包含处理无效JSON的机制,例如抛出`JSONException`,当尝试解析的字符串不是有效的JSON格式时。 6. **流式解析和生成**:为了处理大规模的JSON数据,库可能支持流式API,允许逐行或逐块处理...
- `JSONException`:在处理JSON过程中抛出的异常,例如语法错误或数据不匹配。 - `JSONTokener`:用于解析JSON字符串,提供`next()`和`back()`等方法来移动解析位置。 - `XML`:类,提供了将XML转换为JSON的功能...
5. **其他辅助类**: 包括`JSONException`,这是处理JSON操作时抛出的异常;`JSONPointerException`,当尝试访问不存在的JSON键时抛出;以及`JSONWriter`,用于构建复杂的JSON结构。 在学习`org.json`源码时,可以...
6. **错误处理**:处理可能发生的异常,如`JSONException`,确保程序的健壮性。 JSON.jar文件在Java开发中的应用非常广泛,无论是服务器端API的响应,还是客户端的数据交互,都离不开JSON格式的数据交换。因此,...