从glassfish服务器日志上的javascript函数打印JSON对象
Printing JSON object from javascript function on glassfish server log
场景:运行在glassfish 4.1/jdk1.8.45上的Java servlet。有一个javascript函数正在从数据库中读取,并在服务器端使用javax.script.*执行。当尝试调试该函数时,需要在服务器日志上输出一些json对象。它正在打印[Object-Object]而不是实际的JSON。尝试使用JSON.stringify(),它给出了[defined]。在这种情况下,有没有办法在json对象上打印实际内容?谢谢
JSON.stringify仅适用于javascript对象。它不适用于Java对象。请确保您在JavaScript对象上调用JSON.stringify。
如果确实需要在java对象上生成JSON字符串,可以使用object.bindProperties扩展(https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions#NashorextensionsObject.bindProperties)将Java对象的属性绑定到脚本对象,然后对其调用JSON.stringify。
示例(测试)代码在这里->http://hg.openjdk.java.net/jdk9/dev/nashorn/file/0de67a63e2c7/test/script/nosecurity/treeapi/utils.js
该脚本用于将Nashorn AST树对象[Java对象]转换为友好的JSON对象。
如果你想使用JSON.stringify,它给出了未定义的,这意味着JSON是未定义的还是只是函数?如果是这样的话,那可能是Nashorn的盒子里没有。也许可以尝试将其添加为polyfill:您可以在此处或此处查看。
如果您在Nashorn脚本引擎中处理字符串,那么它们很可能是Java字符串,而不是javascript字符串。修复方法是将Java字符串转换为Javascript字符串。
// this string does not work with stringify()
var javaString = someMethodReturningAJavaString();
var jsString = new String(javaString);
// now stringify() works:
var myJson = JSON.stringify({'key': jsString});
如果typeof(new String(javaString))
返回object
而不是string
,则使用new String(javaString).valueOf()
。对于某些值来说,这似乎是Mozilla Rhino js引擎的唯一解决方案。
如果您有数字,那么您可能需要在new Number()
构造函数中包装java对象。
有关Nashorn发动机的详细信息,请查看https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/javascript.html
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- Javascript,从静态函数中打印全局对象
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 打印链接时,将javascript函数调用到链接中
- 尝试使用.ninnerHTMLlog打印数据,获取错误Uncaught TypeError:undefined不是函数
- 如何在使用函数document.write()打印最终结果后,使用Javascript滚动到页面顶部
- ng中继器打印结果0;当我运行函数时
- 在htm-php页面中打印Javascript函数
- 在 javascript 函数中打印 HTML JavaScript 代码
- jQuery显示函数打印到控制台
- 原型函数打印自身而不是结果
- 使用 JavaScript 函数打印电子邮件地址以防止垃圾邮件有多好
- 需要选择一个新列,并使用带有下拉菜单的onchange函数打印到文本区域
- 在浏览器上运行javascript函数打印向导
- Javascript函数打印.innerhtml,但HTML只出现一会儿就消失了
- JavaScript内部函数打印前一个值
- 使用javascript的Print函数打印弹出窗口
- 如何在使用JavaScript函数打印时打印隐藏的DIV
- 从glassfish服务器日志上的javascript函数打印JSON对象
- JavaScript函数打印出一个完整的二叉树