如何将JSON解析为int?

Jos*_*sef 18 java json

我已经解析了一些JSON数据,只要我将它存储在String变量中就可以正常工作.

我的问题是我需要一个int varibable中的ID而不是String中的ID.我试图做一个演员int id = (int) jsonObj.get("");

但是它给出了一条错误消息,我无法将对象转换为int.所以我尝试使用以下方式进行转换:

String id = (String) jsonObj.get("id");
int value = Integer.parseInt(id);
Run Code Online (Sandbox Code Playgroud)

但这也行不通.怎么了.JSON如何使用int?我的字符串工作得很好,只有当我尝试将它们作为int我才会遇到问题.

这是我的代码:

public void parseJsonData() throws ParseException {

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(jsonData);
        JSONObject topObject = (JSONObject) obj;
        JSONObject locationList = (JSONObject) topObject.get("LocationList");
        JSONArray array = (JSONArray) locationList.get("StopLocation");
        Iterator<JSONObject> iterator = array.iterator();

        while (iterator.hasNext()) {

            JSONObject jsonObj = (JSONObject) iterator.next();
            String name  =(String) jsonObj.get("name");
            String id = (String) jsonObj.get("id");
            Planner.getPlanner().setLocationName(name);
            Planner.getPlanner().setArrayID(id);


        }

    }
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 17

你可以使用parseInt:

int id = Integer.parseInt(jsonObj.get("id"));
Run Code Online (Sandbox Code Playgroud)

或更好,更直接的getInt方法:

int id = jsonObj.getInt("id");
Run Code Online (Sandbox Code Playgroud)

  • API 已更新。代码现在应如下所示:`int id = jsonObj.get("id").asInt();` (2认同)

qx3*_*qx3 9

它取决于您要解析的属性类型.

如果json属性是一个数字(例如5),你可以直接转换为Long,所以你可以这样做:

(long) jsonObj.get("id") // with id = 5, cast `5` to long 
Run Code Online (Sandbox Code Playgroud)

在获得很长时间后,您可以再次转换为int,从而导致:

(int) (long) jsonObj.get("id")
Run Code Online (Sandbox Code Playgroud)

如果json属性是带引号的数字(例如"5"),则将其视为字符串,并且您需要执行类似于Integer.parseInt()或Long.parseLong()的操作;

Integer.parseInt(jsonObj.get("id")) // with id = "5", convert "5" to Long
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,如果您有时收到id是字符串或数字(您无法预测客户端的格式或它可以互换),您可能会遇到异常,尤其是在null json对象上使用parseInt/Long时.

如果不使用Java Generics,处理这些运行时异常的最佳方法是:

if(jsonObj.get("id") == null) {
   // do something here
}

int id;
try{
    id = Integer.parseInt(jsonObj.get("id").toString());
} catch(NumberFormatException e) {
  // handle here
}
Run Code Online (Sandbox Code Playgroud)

您也可以先删除该if,然后将该异常添加到catch中.希望这可以帮助.


小智 5

非常简单。

JSON 示例:

{
   "value":1
}
Run Code Online (Sandbox Code Playgroud)


int z = jsonObject.getInt("value");
Run Code Online (Sandbox Code Playgroud)