Java调用Javascript函数 - 数组失真

时间:2016-12-05 23:50:03

标签: javascript java arrays

我正在使用javax.script.ScriptEngine从java程序调用js方法。

在js方法中,我使用" f"构建以下json。具有数组值的键,我将在json之后返回此内容...

{"s":0,"q":{"b":{"f":[{"r":{"cr":{"gte":"2012-04-01","lte":"2016-07-11","format":"yyyy-MM-dd"}}},{"t":{"x":"kl"}},{"t":{"e":"io"}}]}},"a":{"c":{"t":{"f":"x"}}}}

在java中,我看到相同的json数组被扭曲为" 0"," 1"和" 2"键。请看" f"价值在这里...

{"s":0,"q":{"b":{"f":{"0":{"r":{"cr":{"gte":"2012-04-01","lte":"2016-07-11","format":"yyyy-MM-dd"}}},"1":{"t":{"x":"kl"}},"2":{"t":{"e":"io"}}}}},"a":{"c":{"t":{"f":"x"}}}}

这是java代码......

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
scriptEngine.eval(Files.newBufferedReader(Paths.get("some.js"), StandardCharsets.UTF_8));
Invocable inv = (Invocable) scriptEngine;
Object result = inv.invokeFunction("someFunc", "someparam");

你能不能给我一个暗示,为什么它会被扭曲?

以下代码可以显示我的案例...

Javascript函数 - some.js

function someFunc() {
    var result = {};
    result["q"] = "0";
    var f = [];
    f.push("a");
    f.push("b");
    f.push("c");
    result["f"] = f;
    print(JSON.stringify(result));
    return result;
}

Java类

    import com.fasterxml.jackson.databind.ObjectMapper;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
public class SomeClass {

    public static void main(String[] args) throws Exception {
        ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
        scriptEngine.eval(Files.newBufferedReader(Paths.get("some.js"), StandardCharsets.UTF_8));

        Invocable inv = (Invocable) scriptEngine;

        Object result = inv.invokeFunction("someFunc");
        ObjectMapper objectMapper = new ObjectMapper();
        System.out.println(objectMapper.writeValueAsString(result));
    }
}

输出

JS log: {"q":"0","f":["a","b","c"]}
java log: {"q":"0","f":{"0":"a","1":"b","2":"c"}}

0 个答案:

没有答案