使用Java Nashorn从文件中解析JSON

3
我正在尝试使用Java和IntelliJ解析桌面上的JSON文件。我搜索了一些资料,发现其他JSON/Java API,但是似乎Nashorn已经包含在IntelliJ中了,所以我想尝试使用它。
然而,我无法弄清楚如何操作。我尝试调整一些代码(JSONParser parser = new JSONParser();),但是出现了空的JSONParser声明错误。我该怎么办?我想将每个JSON对象保存为Java对象(它是一个带有两个字符串和一个数组的JSON对象,我想保留这个结构)。
任何帮助都将不胜感激。我找了一圈,但没有找到适用于这种情况的答案。我想仍然要使用FileReader打开文件。我一直在使用BufferedReader读取每行。对于JSON文件,我还需要使用它们吗?
谢谢, Rebecca

1
以下是使用 Nashorn 解析 JSON 的工作代码示例: https://dev59.com/WVPZs4cB2Jgan1znyaVa#43667674。它可能对于 Ad-hock 脚本非常有用,但不建议用于生产环境。 - Vadzim
2个回答

2
为了提供比“使用其他东西”更相关的答案,Nashorn运行时具有与nodejs相同的JSON.parseJSON.stringify。因此,在Java中加载文件(因为您无论如何都必须使用Java类在nashorn中加载文件),一旦您拥有文件的字符串表示形式,将其命名为script,并且一个ScriptEngine实例,将其称为engine,只需调用eval并获取结果,如下所示:Object parsed = engine.eval("JSON.parse("+script+")";)parsed将包含解析的json,因为eval返回最后一个表达式的结果。
然而,这仅仅像匿名Object一样有用,需要在Java中处理它。您还可以在nashorn中解析json并创建java对象(或者只是在nashorn中处理数据),但这将要求您编写nashorn脚本。
祝你好运!
参考资料: ScriptEngine JavaDoc

一份好的nashorn教程

在Java中读取文件


2

Nashorn 不是一个 JSON 解析器。它是一个 Javascript 引擎。如果你想使用 Java 解析 JSON 字符串,有很多好的库可供选择。其中,GsonJackson 是常用的示例。

要将 JSON 字符串解析为 Java 对象(反序列化),首先需要创建相应的 type(Java 类)。当你反序列化你的 JSON 时,将此 type 作为参数传递。

例如,使用 Gson:

Gson gson = new Gson();
MyType myobject = gson.fromJson(jsonSource, MyType.class);

9
你能解释一下Nashorn中的JSONParser类是做什么的吗? - Collin Alpert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接