如何将JSON解析为int?

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

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

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

 String id = (String) jsonObj.get("id"); int value = Integer.parseInt(id); 

但这也行不通。 怎么了。 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 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); } } 

你可以使用parseInt

 int id = Integer.parseInt(jsonObj.get("id")); 

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

 int id = jsonObj.getInt("id"); 

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

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

 (long) jsonObj.get("id") // with id = 5, cast `5` to long 

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

 (int) (long) jsonObj.get("id") 

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

 Integer.parseInt(jsonObj.get("id")) // with id = "5", convert "5" to Long 

唯一的问题是,如果你有时收到id是一个字符串或一个数字(你不能预测你的客户端的格式或它可以互换),你可能会得到一个例外,特别是如果你在null json对象上使用parseInt / Long。

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

 if(jsonObj.get("id") == null) { // do something here } int id; try{ id = Integer.parseInt(jsonObj.get("id").toString()); } catch(NumberFormatException e) { // handle here } 

您也可以先删除它,然后将该exception添加到catch中。 希望这可以帮助。

它非常简单。

示例JSON:

 { "value":1 } 

 int z = jsonObject.getInt("value"); 

他们没有为我工作。 我这样做了,它有效:

要编码为json:

 JSONObject obj = new JSONObject(); obj.put("productId", 100); 

要解码:

 long temp = (Long) obj.get("productId"); 

我使用json.get()和instanceof的组合来读取可能是整数或整数字符串的值。

这三个测试用例说明:

 int val; Object obj; JSONObject json = new JSONObject(); json.put("number", 1); json.put("string", "10"); json.put("other", "tree"); obj = json.get("number"); val = (obj instanceof Integer) ? (int) obj : (int) Integer.parseInt((String) obj); System.out.println(val); obj = json.get("string"); val = (obj instanceof Integer) ? (int) obj : (int) Integer.parseInt((String) obj); System.out.println(val); try { obj = json.get("other"); val = (obj instanceof Integer) ? (int) obj : (int) Integer.parseInt((String) obj); } catch (Exception e) { // throws exception }