场景:在glassfish 4.1/jdk1.8.45上运行Java servlet。有一个javascript函数正在从数据库中读取,并使用javax.script.*在服务器端执行。当尝试调试此函数时,需要在服务器上输出一些json对象log.It是打印对象对象,而不是使用JSON.stringify()的实际JSON.Tried,它提供了未定义。在这种情况下,有没有办法在json对象上打印实际内容?谢谢。
发布于 2016-07-30 22:05:42
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
此脚本用于将Nashorn AST树对象、Java对象转换为友好的JSON对象。
发布于 2016-08-02 16:15:41
发布于 2018-08-25 05:38:09
如果您在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's Rhino js engine的唯一解决方案。
如果您有数字,那么您可能需要在new Number()
构造函数中包装java对象。
有关Nashorn引擎的详细信息,请查看https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/javascript.html
https://stackoverflow.com/questions/38666965
复制相似问题