我正在使用Javascript/Java查询MSSQL数据库,然后使用从查询接收的CachedRowSet向Json对象添加一些信息。以下是查询数据库并将结果添加到对象的代码。Json对象的无限递归问题(使用Java/Javascript)
var sqlGetVariables = "SELECT MappingVariable.Id as Id, MappingVariable.Name AS Name, MappingVariable.Value AS Value FROM MappingGroup LEFT JOIN MappingVariable ON MappingGroup.Id = MappingVariable.MappingGroupId WHERE MappingGroup.Id = " + mappingGroupId + " AND MappingVariable.Id IS NOT NULL";
var resultVariables = uberfaceDB.executeCachedQuery(sqlGetVariables);
while (resultVariables.next()) {
var variableId = resultVariables.getObject("Id");
var variableName = resultVariables.getObject("Name");
var variableMapping = resultVariables.getObject("Value");
jsonArray["Segments"][seg]["Variables"][variableName] = {};
jsonArray["Segments"][seg]["Variables"][variableName]["Mapping"] = variableMapping;
}
我遇到的问题是,有一个与最后一行回事愚蠢的东西,我分配“variableMapping”的JSON对象。该代码行执行得很好,但是当我稍后继续遍历Json对象时,我陷入了无限递归中,该循环通过“class”“package”和“specificationversion”循环。
下面是我用来遍历对象的代码。
function echoJson (jsonArray, strStuff) {
var strJson = "" + strStuff;
for (var item in jsonArray) {
logger.error(strJson + " --> " + item);
echoJson(jsonArray[item], strJson + " --> " + item);
}
}
logger.error函数内置于我正在编写的应用程序(称为Mirth Connect)中。它只是将消息输出到控制台以用于错误/调试目的。这里是什么,我会希望获得与echoJson函数的一个例子:
Segments --> MSH --> Segments --> PID --> Variables --> PatientFirstName --> Mapping --> variableMappingValue
但这里是我真的开始:
Segments --> MSH --> Segments --> PID --> Variables --> PatientFirstName --> Mapping --> class --> package --> specificationVersion --> class --> package --> specificationVersion --> class --> package --> specificationVersion...
它不断重复的“类 - >包装 - > specificationVersion“部分,直到我停止应用程序。
如果我替换下面的代码行:
jsonArray["Segments"][seg]["Variables"][variableName]["Mapping"] = variableMapping;
用一个硬编码字符串,如
jsonArray["Segments"][seg]["Variables"][variableName]["Mapping"] = "test";
然后它没有任何问题。
预先感谢您看看这个!
2015-07-09
TACHEON
+0
为什么这个标记为java?并且不应该使用您用来访问数据库的任何JavaScript库进行标记? –
+0
它被标记为Java,因为根据我上面的评论,有一些Java被利用。尽管它大部分都是在数据库调用的幕后,但我的问题中的主要组件之一是Java的CachedRowSet,这是SQL结果存储在其中的结果(resultVariables对象)。至于添加库,我已经添加了Mirth,这是我在做这个编码的软件。它有它自己的专有JavaScript库,它是其他Java库的顶层,但我不知道哪个那些。 –