【问题标题】:How to handle a null value in JSON-Simple?如何处理 JSON-Simple 中的空值?
【发布时间】:2012-10-04 14:48:26
【问题描述】:

我正在使用 JSON-Simple 以 JSON 格式提取推文。我将用户对象拆分为它自己的 JSONObject 类,在内存中:

incomingUser = (JSONObject) incomingTweet.get("user");

然后我使用 JSON-Simple 从推文和用户对象中剥离各种字段;我在做

strippedJSON.put("userLocation", incomingUser.get("location").toString();

但事实证明,有时用户的位置设置为null

所以现在我正在检查我要剥离的字段是否为空,并将其设置为“”:

strippedJSON.put("userLocation", (incomingUser.get("location").toString().equals(null)?
        "": incomingUser.get("location").toString());

但我已经在调试模式下通过 Eclipse 并发现有人的位置设置为 null,并跳过了我剥离与 "location" 关联的 JSON 对象字段并将其放入 JSON 对象字段 @ 的部分987654326@。我得到了一个 NPE。

我的三元语句没有说明这一点吗?虽然它会检查它是否等于 null(只有一个“空对象”它应该能够看到指针是相同的)如果它是(condtion? 是真的)它应该评估为@ 987654328@没有?

我哪里错了?我应该怎么做来处理这个空值?

【问题讨论】:

    标签: java nullpointerexception ternary-operator json-simple


    【解决方案1】:

    由于您试图访问空对象上的 .equals() 方法,因此您收到空指针异常。

    如果location 键返回值,请尝试以下操作:

    (incomingUser.get("location").toString() == null) ? etc..
    

    编辑:实际上我刚刚想到incomingUser.get("location") 可能返回null(即location 键可能指的是JSONObjectJSONArray),在这种情况下你需要:

    (incomingUser.get("location") == null) ? etc...
    

    【讨论】:

      【解决方案2】:

      只需使用try and catch 块来处理它............

      try{
      
      strippedJSON.put("userLocation", incomingUser.get("location").toString();
      
      
      
      }catch(Exception ex){
      
        System.out.println("This field is null");
      
      }
      

      【讨论】:

      • 哦,当然,但是在 JSON 文件中放入一些有意义的东西不是更有意义吗?这不是滥用try{}catch(){} 块吗?
      • @Pureferret 到目前为止,我遇到的所有 JSON 都被提供为我的一些 web 服务......所以 JSON 的编码不在我手中,但我需要如何处理它......并尝试并抓住是我这样做的方式......
      • @Pureferret 整个 Java 都是在滥用try{}catch(){}
      猜你喜欢
      • 2014-09-23
      • 2015-10-27
      • 2019-03-18
      • 2021-06-26
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      相关资源
      最近更新 更多