如何将JSON解析为int?

pdsfdshx  于 2023-05-02  发布在  其他
关注(0)|答案(8)|浏览(221)

我已经解析了一些JSON数据,只要我将其存储在String变量中,它就可以正常工作。
我的问题是我需要一个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);

        }

    }
qyzbxkaa

qyzbxkaa1#

您可以使用parseInt

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

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

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

bn31dyow2#

它取决于您正在分析的属性类型。
如果json属性是一个数字(e.g. 5)你可以直接转换为Long,所以你可以这样做:

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

得到long后,你可以再次转换为int,结果是:

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

如果json属性是一个带引号的数字(e.例如“5”),is被认为是一个字符串,你需要做一些类似于Integer的事情。parseInt()或Long。return();

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
}

您还可以删除第一个if并将异常添加到catch中。希望这能帮上忙。

a0x5cqrl

a0x5cqrl3#

很简单。
JSON示例:

{
   "value":1
}
int z = jsonObject.getInt("value");
sg2wtvxw

sg2wtvxw4#

他们中没有一个为我工作。我这样做了,它工作:
编码为json:

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

要解码:

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

hs1rzwqc5#

我使用了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
}
kx1ctssn

kx1ctssn6#

这个问题有点老了,但是我创建了一个函数,将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;
  }

该函数只是遍历数组,并将所选对象的所有元素作为整数返回

wi3ka0sx

wi3ka0sx7#

JsonNode用途:Integer.parseInt(String.valueOf())

xoefb8l8

xoefb8l88#

这是只对我有用的:

id = ((Long) jsonObj.get("id")).intValue();

这是因为json数字值只有Long。

相关问题