【问题标题】:Error java.lang.NullPointerException in JSON parsingJSON解析中的错误java.lang.NullPointerException
【发布时间】:2015-12-14 10:32:33
【问题描述】:

我是 Java 新手,使用下面的代码解析 JSON,但是当 offer {} 节点带有空值时出现 java.lang.NullPointerException 错误,这是我代码中的公共类。

如何处理空的 JSON 节点/键 ??

如果“offers”下有“info”之类的数据,则代码能够解析JSON,但是当JSON返回并为空时会以NULL异常错误退出,如下所示。

错误信息:

Exception in thread "api_temp_1.dat" java.lang.NullPointerException
at com.t.dw.dl.api.data.Pkg_Data.getCount(Pkg_Data.java:57)
at com.t.dw.dl.api.DataRetrieveRunnable.run(DataRetrieveRunnable.java:185)

从显示的错误行中提取代码

public long getCount() {
        if (offers != null)
          return offers.getPkg().size();
        return 0;
      }

    **Code from com.t.dw.dl.api.DataRetrieveRunnable.run(DataRetrieveRunnable.java:185)**
          try
          {
            Pkg_Data dls = parseResult(result);
            if (dls.getCount() > 0)
            {
              fw.write(deals.writeResults(fields, delimiter));
              threadStats.increment(Stats2.COUNT_OF_ROWS_PROCESSED,
                  dls.getCount());
            }
          }

    Parsing code:
      private Pkg_Data parseResult( String result ) throws JsonParseException {
        JsonParser parser = new JsonParser();
        JsonElement jo = parser.parse(result);
        Gson gson = new Gson();
        Pkg_Data ehw = gson.fromJson(jo, Pkg_Data.class);
        return ehw;
      }

代码:

  import java.util.ArrayList;

public class offers
{
  private ArrayList<PkgData> pkg;

  class Pkgdata
  {
    Info Info;

    class Info
    {
      String Id;
      String Url;

    }
    public String getId() {
      if (Info != null && Info.Id != null)
        return Info.Id;
      return "";
    }

示例 JSON:不适用于“优惠”返回空的情况

{  
       "offerInfo":{  
          "siteID":"1",
          "language":"en_US",
          "currency":"USD"
       },
       "offers":{ }
        }

【问题讨论】:

  • 正在使用包“javax.json”中的类吗?
  • 给我们堆栈跟踪,它可能有助于更快地解决这个问题
  • @VVJ,不确定,因为我对 Java 还很陌生并试图修改现有代码,但我可以看到正在使用 GSON 包。
  • 我没有看到导致异常的代码。 com.t.dw.dl.api.data.Pkg_Data.getCount
  • 代码不足,无法确定。我假设offers.getPkg() 返回 ArrayList 并且看起来它为空。显示所有相关代码。解析 JSON 的代码也不存在。 JSON从哪里来?那可能是空的。

标签: java json


【解决方案1】:

这是因为报价与您提供的类进行比较,因此在这种情况下 Json 将是错误的,尝试使用此 Json 它将起作用。

{
  "offerInfo": {
    "siteID": "1",
    "language": "en_US",
    "currency": "USD"
  },
  "offers": {
    "siteID": " ",
    "language": "",
    "currency": " "
  }
}

因为编译器无法在您的报价对象中找到任何字段属性,所以它给出错误。

试试这个 Json。

【讨论】:

  • 我需要处理 JSON 返回空的情况,所以我需要更改代码来处理这种情况。
  • 那么你不应该解析为那个类对象,如果你这样做,那么它将创建异常,但你可以在解析之前处理它。
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多