java.lang.NumberFormatException:对于输入字符串:“ 18446744073709551615”

时间:2019-03-19 12:39:33

标签: java eclipse

首先..如果缺少某些信息,请询问,我会提供所需的输入。

我的桌面上有一个.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();
            }
    }
}

2 个答案:

答案 0 :(得分:2)

18446744073709551615

超出maximum value of a long

9223372036854775807

您应该将其解析为BigInteger

答案 1 :(得分:0)

它试图将值解析为整数/长且超出范围

18446744073709551616 = 2 ^ 64-1

Integer.MAX_VALUE = 2 ^ 31-1

Long.MAX_VALUE = 2 ^ 63-1