21

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

我的问题是我需要 int 变量而不是 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<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);


        }

    }
4

6 回答 6

22

您可以使用parseInt

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

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

int id = jsonObj.getInt("id");
于 2013-03-29T08:43:07.640 回答
12

这取决于您正在解析的属性类型。

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

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

获得 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 泛型,我使用的处理这些运行时异常的最佳方法是:

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

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

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

于 2015-07-02T20:52:07.403 回答
4

它非常简单。

示例 JSON:

{
   "value":1
}


int z = jsonObject.getInt("value");
于 2016-09-22T08:39:13.213 回答
2

他们都不为我工作。我这样做了,它奏效了:

编码为 json:

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

解码:

long temp = (Long) obj.get("productId");
于 2015-11-02T16:15:40.587 回答
0

这个问题有点老了,但我得到了一个很好的结果,创建了一个函数来将 Json 字符串中的对象从字符串变量转换为整数

function getInt(arr, prop) {
    var int;
    for (var i=0 ; i<arr.length ; i++) {
        int = parseInt(arr[i][prop])
            arr[i][prop] = int;
    }
    return arr;
  }

该函数只是通过数组并将您选择的对象的所有元素作为整数返回

于 2021-02-24T16:42:24.117 回答
0

I use a combination of json.get() and instanceof to read in values that might be either integers or integer strings.

These three test cases illustrate:

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
}
于 2017-02-03T14:02:55.477 回答