【问题标题】:How do I parse JSON into an int?如何将 JSON 解析为 int?
【发布时间】:2013-03-29 08:41:18
【问题描述】:

我已经解析了一些 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);


        }

    }

【问题讨论】:

    标签: java json


    【解决方案1】:

    您可以使用parseInt

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

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

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

    【讨论】:

    • 什么意思?你的id 字符串到底是什么?
    • int id = Integer.parseInt(jsonObj.get("id"));这一次日食想给 String 添加一个演员表。
    • 当您执行String id = (String) jsonObj.get("id"); 时,您的 id 字符串的精确值是多少?
    • 它以字符串格式返回 id 数字。 0000131320。但我需要它们以 int 格式从组合框中获取 selectedindex。
    • API 已更新。代码现在应该如下所示:int id = jsonObj.get("id").asInt();
    【解决方案2】:

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

    如果 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 中。 希望这会有所帮助。

    【讨论】:

    • 我使用这个衬里,它工作得很好int TotalMiles = ((json_obj.has("TotalMiles")) ? ((json_obj.get("TotalMiles").equals("")) ? 0 : json_obj.getInt("TotalMiles")) : 0); 它并没有解决发送string 的根本问题,但它确实涵盖了缺失、空值和空白(根据我的经验)通常是问题。您可以在其中添加一个 parseInt ,但它有点笨拙
    【解决方案3】:

    很简单。

    示例 JSON:

    {
       "value":1
    }
    


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

    【讨论】:

      【解决方案4】:

      没有一个对我有用。 我这样做了,它奏效了:

      编码为 json:

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

      解码:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          这个问题有点老了,但我得到了一个很好的结果,它创建了一个函数来将 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;
            }
          

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

          【讨论】:

            【解决方案7】:

            对于 JsonNode 使用:Integer.parseInt(String.valueOf())

            【讨论】:

              猜你喜欢
              • 2018-03-31
              • 1970-01-01
              • 1970-01-01
              • 2017-09-08
              • 2019-09-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多