从glassfish服务器日志上的javascript函数中打印JSON对象

问题描述:

场景:运行在glassfish 4.1/jdk1.8.45上的Java servlet。有一个JavaScript函数从数据库中读取,并在服务器端使用javax.script。*执行。当试图调试这个函数时,需要在服务器日志上输出一些json对象。它是打印[Object object]而不是实际的JSON。使用JSON.stringify(),它给出[undefined]。 有没有办法在这种情况下打印json对象上的实际内容? 谢谢。从glassfish服务器日志上的javascript函数中打印JSON对象

JSON.stringify仅适用于javascript对象。它不适用于Java对象。请确保您在JavaScript对象上调用JSON.stringify。

如果您确实需要在java对象上创建JSON字符串,则可以使用Object.bindProperties扩展(https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions#Nashornextensions-Object.bindProperties)将Java对象的属性绑定到脚本对象,然后再调用JSON.stringify。

样品(测试)代码是在这里 - >http://hg.openjdk.java.net/jdk9/dev/nashorn/file/0de67a63e2c7/test/script/nosecurity/treeapi/utils.js

这个脚本用于在犀牛AST树对象[Java对象]转换为友好的JSON对象。

+0

是的,我在JavaScript中使用stringify而不是java。我希望从JavaScript函数内部打印调试语句。 –

+0

这部分 - 在脚本内调用JSON.stringigy很好。我的问题是关于你传递给JSON.stringify的参数!这是一个Java对象作为参数或脚本对象?如果你有JS对象的“未定义”,这听起来像一个错误。如果它是Java对象,那么它是按照设计的。 –

+0

好的..我误解了。这个说法是js的对象。 \t var fullJson = formDataHolder.getFullJson(), \t \t ignoreList = getIgnoreList(); \t \t groupKey = parseInt函数(REQ .__ ctrl__groupKey) \t \t的ItemKey = parseInt函数(REQ .__ ctrl__itemKey) \t \t validateGroup = parseInt函数(REQ .__ ctrl__validateGroup) \t \t validateItem = parseInt函数(REQ .__ ctrl__validateItem) \t在REQ \t reviewRequested = '审查', \t \t showReview =假, \t \t returnJson = {}, \t \t vItemCheck = validateGroup + '' +有效ateItem, \t \t itemCheck = groupKey +'。'+ itemKey; 经过一些操作,我试图打印returnJson。 感谢您的帮助! –

如果你想使用JSON.stringify,它给出了未定义的,是否意味着JSON是未定义的或只是函数? 如果是这样,那可能是Nashorn没有在箱子里。也许尝试添加它作为一个polyfill:你可以看看herehere