我不是很喜欢JavaScript而且我遇到了这个问题(我只能使用纯旧的JS而不是第三方库来解决它。)
我有一个处理JSON对象的JavaScript脚本,在我的脚本中我有:
if(finalResponse.SubSpeciesInfo == null) {
log.info("NO SUBSPECIES");
finalResponse.SubSpeciesInfo.SubSpeciesList = [];
}
检查我的原始JSON对象的此属性是否为null:
"SubSpeciesInfo": null
如果我的JSON对象的这个属性为null,则进入if块。
我在这里要做的是附加一个空列表的 SubSpeciesList 子字段。
但是这样它不起作用,我得到了一个错误:
ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an error executing the inlined js script function mediate {org.apache.synapse.mediators.bsf.ScriptMediator}
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: TypeError: Cannot set property "SubSpeciesList" of null to "org.mozilla.javascript.NativeArray@37aa205f" (<Unknown Source>#106) in <Unknown Source> at line number 106
at com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68)
有什么问题?我错过了什么?我该如何解决这个问题?
答案 0 :(得分:3)
您需要为数组指定一个具有新属性的对象,因为您尝试使用不存在的属性SubSpeciesList
。
if (finalResponse.SubSpeciesInfo === null) {
log.info("NO SUBSPECIES");
finalResponse.SubSpeciesInfo = { SubSpeciesList: [] };
}
对于没有类型强制的比较,使用更好的===
进行严格检查。阅读更多:Strict equality using ===
<强>样本强>
var finalResponse = {
SubSpeciesInfo : null
}
if(finalResponse.SubSpeciesInfo === null) {
console.log("NO SUBSPECIES");
finalResponse.SubSpeciesInfo = {SubSpeciesList : []};
}
console.log(finalResponse);
&#13;