JavaScript/GSON:通过对象图动态访问JSON引用(循环引用)
JavaScript/GSON: Access JSON references dynamically over object graph (circular references)
我遇到了问题,通过Google GSON序列化我的Java对象,因为有几个循环引用。我所有的尝试都以StackOverflowException告终,因为GSON无法处理这些循环引用。
作为解决方案,我发现了以下GraphAdapterBuilder
:
http://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java?r=1170
例:https://groups.google.com/forum/#!topic/google-gson/z2Ax5T1kb2M
{
"0x1": {
"name": "Google",
"employees": [
"0x2",
"0x3"
]
},
"0x2": {
"name": "Jesse",
"company": "0x1"
},
"0x3": {
"name": "Joel",
"company": "0x1"
}
}
这工作得很好,但我仍然无法在对象图上动态访问参考值 (0xn),例如:
alert(0x3.company.name);
--> 应该打印"谷歌",但我只收到undefined
是否有可能以某种方式实现这一目标?
也许使用自定义JSON.parse(ajaxResponse, function(key,value) {}
函数将变量替换为引用的对象树?
对于未来的用户,请参考这个使用GraphAdapterBuilder的答案:https://stackoverflow.com/a/10046134/1547266
!!更新,更好的解决方案!
如果可以切换库,只需使用 FlexJson>>> http://flexjson.sourceforge.net/。
我用自己的 JSON 解析器解决了我的问题:
"ref"
在原始GraphAdapterBuilder
中"0x[n]"
源:
$.ajax({
type: "POST",
url: "controller/ajaxmethod.htm",
data: { "var1": var1, "var2":var2},
success: function(response){
var jsonObject = parseGraphGSON(response, 0);
...
},
error: function(e){
alert('Error: ' + e.status);
}
});
function parseGraphGSON(gsonResponse, recursionLevel) {
var maxRecursionDepth = 2;
var jsonObject = JSON.parse(gsonResponse, function(key, value) {
if (typeof value === 'string') {
if (value.indexOf("ref") == 0) {
if (recursionLevel < maxRecursionDepth) {
return parseGraphGSON(gsonResponse, recursionLevel + 1)[value];
} else {
return JSON.parse(gsonResponse)[value];
}
}
}
return value;
});
return jsonObject;
}
- 如何在此 JSON 文件中引用此数据
- 将数组从 Spring bean 转换为 JSON 以在 JSP 中引用
- 使用 jQuery 将 HTML 文本抓取到 JSON 中,但由于循环引用而无法字符串化
- 在JSON中存储对象引用
- 如何检测通过JSON数据引用的图像何时加载AJAX
- 使用Javascript变量引用JSON键
- 使用dbpedia服务器的json数据的javascript引用错误
- 使用 - in 键引用 json 中的元素
- 在 JavaScript 中使用变量引用 JSON 数字键
- 为什么在剃刀视图页面中引用JSON编码
- 引用JSON树结构的分支的最佳方法是什么
- 引用JSON数组时出现问题
- 如何在jsp标签中引用json数组的大小
- 使用参数动态引用json对象
- 在node.js中使用forEach引用JSON对象
- 试图在javascript中引用JSON数组的特定部分
- 在FOR之外引用JSON导入对象时遇到问题
- 引用json文件中的数组
- 我如何在一个函数中传递一个数组值,该函数将在Pouchdb中引用JSON名称
- 不能引用 JSON 中的元素