【发布时间】: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从哪里来?那可能是空的。