首先..如果缺少某些信息,请询问,我会提供所需的输入。
我的桌面上有一个.json文件,现在我必须使用Java,并且必须从.json文件中提取值。 这是我的任务:**编写提取值的脚本 “自动->内核->发布” 在附件的json文件中。
示例:输出:
3.16.0-5-amd64 **
json文件有27k +行,我不知道这可以有问题。
.json文件包括以下内容:
1 {
2 “results”: 3,
3 “rows”: [
4 {
5 “name”: “test”,
6 “chef_environment”: “office”,
7 “json_class”: “Chef::Node”,
8 “automatic”: {
9 “nginx”: {
10 “version”: null,
11 “configure_arguments”: [
12
13 ],
14 “prefix”: null,
15 “conf_path”: null
16 },
.....
98 “kernel”: {
99 “name”: “Linux”,
100 “release”: “3.16.0-5-amd64"
这是我的代码:
package json;
import java.io.*;
import java.io.File;
import java.io.FileReader;
import org.json.simple.parser.ParseException;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.JSONArray;
import java.util.Iterator;
public class json {
public static void main(String[] args) throws Exception {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("C:\\Users\\admin-elias\\Desktop\\nginx.json"));
JSONObject jsonObject = (JSONObject) obj;
String automatic = (String) jsonObject.get("automatic");
String kernel = (String) jsonObject.get("kernel");
JSONArray release = (JSONArray) jsonObject.get("release");
System.out.println("automatic: "+automatic);
System.out.println("kernel: "+kernel);
System.out.println("release: "+release);
;
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我尝试运行程序时,出现以下错误:
java.lang.NumberFormatException: For input string: "18446744073709551615"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Long.parseLong(Long.java:692)
at java.base/java.lang.Long.valueOf(Long.java:1144)
at org.json.simple.parser.Yylex.yylex(Yylex.java:660)
at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:118)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:92)
at json.json.main(json.java:18)
我在做什么错?我对java还是比较陌生,我需要运行此程序,因此每个建议或帮助都将非常不错。 :)
编辑:
我终于得到了运行良好的代码:
public class json {
public static void main(String[] args) throws Exception {
try {
JsonReader jsonReader = new JsonReader(new FileReader("filename"));
Gson gson = new Gson();
JsonElement json = gson.fromJson(jsonReader, JsonElement.class);
//JsonElement json = new JsonParser().parse(jsonString);
JsonArray array = json.getAsJsonObject().get("rows").getAsJsonArray();
int length = array.size();
for (int i = 0; i < length; i++) {
System.out.println(array.get(i).getAsJsonObject().get("automatic").getAsJsonObject().get("kernel").getAsJsonObject().get("release").getAsString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
答案 1 :(得分:0)
它试图将值解析为整数/长且超出范围
18446744073709551616 = 2 ^ 64-1
Integer.MAX_VALUE = 2 ^ 31-1
Long.MAX_VALUE = 2 ^ 63-1