gpt4 book ai didi

javascript - Rhino JS 在函数返回期间错误地将 JSON 字符串转换为对象

转载 作者:行者123 更新时间:2023-11-28 00:14:20 32 4
gpt4 key购买 nike

我正在使用 Ant 的“script language="javascript"”标签在 JDK 1.7 上通过 Rhino Js 运行 javascript。我最近遇到一个问题,当从函数返回变量时,变量的类型被错误地更改。

我有一个非常小的辅助函数,可以使用 java 接口(interface)读取文件。

        importClass(java.io.File);
importClass(java.io.FileReader);
function readFile(directory, filename) {
var file = new File(directory, filename);
println("Found file: " + directory + "/" + filename);
var fr = new FileReader(file);
var fileText = "";
var nextChar = fr.read();
while(nextChar != -1)
{
fileText += String.fromCharCode(nextChar);
nextChar = fr.read();
}
println('In readFile result has type ' + typeof fileText);
return fileText;
}

这在大多数机器上都可以正常工作,但是在 Linux 机器的某些子集上,当使用此函数读取包含有效 JSON 的文件时,变量的返回类型从“字符串”更改为“对象”。

// manifest.json is a file containing valid JSON.
var manifestText = readFile(extensionDirectory, "manifest.json");
println('After return result has type ' + typeof manifestText);
// The output of the above is:
// [script] In readFile result has type string
// [script] After return result has type object

通常我会将此视为一个奇怪的现象,只需检查类型并使用 JSON.stringify 将对象转换回字符串,但是......尝试在新的“对象”上调用 JSON.stringify 会失败。

javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: Java class "[Ljava.lang.annotation.Annotation;" has no public instance field or method named "toJSON". (<Unknown source>#18) in <Unknown source> at line number 18

如果有人对如何强制 Rhino JS 通过函数调用正确保留变量类型有任何想法,我将非常感谢您的帮助。

最佳答案

我能够通过将函数调用包装在全局字符串构造函数中来强制字符串类型。

var manifestText = String(readFile(dir, filename));

我仍然不喜欢这里发生的隐式类型转换,但这至少解决了我的问题。

关于javascript - Rhino JS 在函数返回期间错误地将 JSON 字符串转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604031/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com