【问题标题】:java nashorn parse json from filejava nashorn从文件中解析json
【发布时间】:2015-09-17 06:14:42
【问题描述】:

我正在尝试使用java 和intelliJ 在我的桌面上解析json 文件。我所做的谷歌搜索似乎带来了其他JSON/Java API,但似乎nashorn 带有intellij,所以我宁愿尝试使用它。

但是我想不通。我尝试修改一些代码 (JSONParser parser = new JSONParser();),但出现空的 JSONParser 声明错误。我该怎么做?我想将每个 json 对象保存为一个 java 对象(它是一个带有 2 个字符串和一个数组的 JSON obj,我想保留这个结构)。

任何帮助将不胜感激。我确实环顾四周,但无法以似乎适用于这种情况的方式找到答案。大概我仍然会使用FileReader 打开文件。我一直在使用BufferedReader 来阅读每一行。我仍然使用带有JSON 文件的那些吗?

谢谢, 丽贝卡

【问题讨论】:

标签: java json intellij-idea nashorn


【解决方案1】:

Nashorn 不是 JSON 解析器。这是一个Javascript 引擎。如果你想用 Java 解析 JSON 字符串,有几个很好的库。 Gson 和 Jackson 是流行的例子。

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

例如,使用 Gson:

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

【讨论】:

  • 您能解释一下 Nashorn 中的 JSONParser 类的作用吗?
【解决方案2】:

为了提供比“使用其他东西”更相关的答案,Nashorn 运行时具有 JSON.parse 和 JSON.stringify,就像 nodejs 一样。 因此,在 java 中加载文件(因为无论如何您都必须使用 nashorn 中的 java 类来加载文件),一旦您有了文件的字符串表示形式,就将其命名为 script 和 ScriptEngine 的实例,调用它engine,只需调用 eval 并得到如下结果:Object parsed = engine.eval("JSON.parse("+script+")";) 和 parsed 将包含解析的 json,因为 eval 返回最后一个表达式的结果

这仅与匿名 Object 一样有用,并且需要在 Java 中处理。您也可以在 nashorn 中解析 json 并在 nashorn 中创建一个 java 对象(或只处理 nashorn 中的数据),但这需要您编写一个 nashorn 脚本。

祝你好运!

参考:

ScriptEngine JavaDoc

A good nashorn tutorial

Reading a file in Java

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 2016-04-05
    • 2015-03-09
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多