java nashorn 从文件中解析 json
java nashorn parse json from file
我正在尝试使用 java
和 intelliJ
解析桌面上的 json
文件。我做的谷歌搜索似乎带来了其他 JSON
/Java
API,但似乎 nashorn
带有 intellij
,所以我宁愿尝试使用那。
不过我想不通。我尝试修改一些代码 (JSONParser parser = new JSONParser();
),但空 JSONParser
声明出错。我该怎么做?我想将每个 json
对象保存为一个 java 对象(它是一个 JSON
带有 2 个字符串和一个数组的对象,我想保留这个结构)。
如有任何帮助,我们将不胜感激。我确实环顾四周,但找不到适合这种情况的答案。大概我仍然会使用 FileReader
打开文件。我一直在使用 BufferedReader
来阅读每一行。我是否仍然使用那些带有 JSON
个文件的文件?
谢谢,
丽贝卡
Nashorn
不是 JSON
解析器。这是一个 Javascript
引擎。如果你想用 Java 解析 JSON
字符串,有几个很好的库。 Gson
和 Jackson
是流行的例子。
要将JSON
字符串解析为Java对象(反序列化),首先需要创建合适的type
(Javaclass) .当您反序列化 JSON
.
时,您将此 type
作为参数传递
例如,使用 Gson:
Gson gson = new Gson();
MyType myobject = gson.fromJson(jsonSource, MyType.class);
为了提供比“使用其他东西”更相关的答案,Nashorn 运行时有 JSON.parse
和 JSON.stringify
,就像 nodejs 一样。
因此,在 java 中加载文件(因为无论如何你都必须在 nashorn 中使用 java 类 加载文件),一旦你有了文件的字符串表示,就将其称为 script
和 ScriptEngine
的实例,称之为 engine
,只需调用 eval 并得到如下结果:Object parsed = engine.eval("JSON.parse("+script+")";)
和 parsed
将包含已解析的 json, 因为 eval
returns 最后一个表达式的结果
然而,这仅与匿名 Object
一样有用,并且需要在 Java 中处理。你也可以解析nashorn中的json,在nashorn中创建一个java对象(或者只是处理nashorn中的数据),但这需要你写一个nashorn脚本。
祝你好运!
参考:
我正在尝试使用 java
和 intelliJ
解析桌面上的 json
文件。我做的谷歌搜索似乎带来了其他 JSON
/Java
API,但似乎 nashorn
带有 intellij
,所以我宁愿尝试使用那。
不过我想不通。我尝试修改一些代码 (JSONParser parser = new JSONParser();
),但空 JSONParser
声明出错。我该怎么做?我想将每个 json
对象保存为一个 java 对象(它是一个 JSON
带有 2 个字符串和一个数组的对象,我想保留这个结构)。
如有任何帮助,我们将不胜感激。我确实环顾四周,但找不到适合这种情况的答案。大概我仍然会使用 FileReader
打开文件。我一直在使用 BufferedReader
来阅读每一行。我是否仍然使用那些带有 JSON
个文件的文件?
谢谢, 丽贝卡
Nashorn
不是 JSON
解析器。这是一个 Javascript
引擎。如果你想用 Java 解析 JSON
字符串,有几个很好的库。 Gson
和 Jackson
是流行的例子。
要将JSON
字符串解析为Java对象(反序列化),首先需要创建合适的type
(Javaclass) .当您反序列化 JSON
.
type
作为参数传递
例如,使用 Gson:
Gson gson = new Gson();
MyType myobject = gson.fromJson(jsonSource, MyType.class);
为了提供比“使用其他东西”更相关的答案,Nashorn 运行时有 JSON.parse
和 JSON.stringify
,就像 nodejs 一样。
因此,在 java 中加载文件(因为无论如何你都必须在 nashorn 中使用 java 类 加载文件),一旦你有了文件的字符串表示,就将其称为 script
和 ScriptEngine
的实例,称之为 engine
,只需调用 eval 并得到如下结果:Object parsed = engine.eval("JSON.parse("+script+")";)
和 parsed
将包含已解析的 json, 因为 eval
returns 最后一个表达式的结果
然而,这仅与匿名 Object
一样有用,并且需要在 Java 中处理。你也可以解析nashorn中的json,在nashorn中创建一个java对象(或者只是处理nashorn中的数据),但这需要你写一个nashorn脚本。
祝你好运!
参考: