2015-09-17 41 views
0

我是Java新手,使用下面的代碼來解析JSON,但是當offer {}節點帶有空值時,我得到java.lang.NullPointerException錯誤,這是空值在我的代碼公共類。JSON解析中的錯誤java.lang.NullPointerException

如何處理空的JSON節點/鍵?

代碼能夠解析JSON,如果「提供」如「信息」下有數據,但JSON返回時出現空異常錯誤,如下所示爲空。

ERROR MSG:從誤差線所示

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; 
     } 

CODE:

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":{ } 
     } 
+0

正在使用包「javax.json」中的類嗎? – VVJ

+0

給我們堆棧跟蹤,它可能有助於更快地解決這個問題 – Phantomazi

+0

@VVJ,不確定,因爲我對Java很陌生並試圖修改現有代碼,但是我可以看到正在使用GSON包。 – rkj

回答

0

這是因爲報價相比,你給在這種情況下是指這樣的類的Json將嘗試用此JSON是錯誤的將工作。

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

因爲編譯器無法在您的報價對象中找到任何字段屬性,所以它給出錯誤。

試試這個Json。

+0

我需要處理JSON返回空的情況,所以我需要對代碼進行更改以處理該場景。 – rkj

+0

那麼你不應該解析爲類對象,如果你這樣做,它會創建異常,但你可以在解析之前處理它。 – Krishna