2014-09-12 77 views
-1

我要分析此JSON檢索的teluser_id的Java:如何解析此JSON

的值。例如:

{ 
    "status":"ok", 
    "account":{ 
    "0":{ 
     "user_id":"2", 
     "thirdparty_id":"200", 
     "tel":"28000000", 
     "mobile":"28000000", 
     "fax":"28000000" 
    } 
    } 
} 

這裏是我嘗試使用檢索tel代碼:

JsonParser jp = new JsonParser(); 
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); 
JsonObject rootobj = root.getAsJsonObject(); 
JsonObject rootobj1 = (JsonObject) rootobj.get("account"); 
JsonObject rootobj2 = (JsonObject) rootobj.get("0"); 

String tel=rootobj2.get("tel").getAsString(); 

的問題是,一個java.lang.NullPointerException在這行拋出:

String tel=tel=rootobj2.get("tel").getAsString(); 
+0

這不是分析它在根。它在帳戶內。 – 2014-09-12 15:04:33

+0

只需使用Jackson或Gson。 – chrylis 2014-09-12 15:29:27

回答

1

的第一件事,如果你有發佈JsonString正確那麼它是不是一個有效的JSON作爲tel"應該"tel" 然後你就可以使用org.json作爲

JSONObject jsonObject = new JSONObject(str); 
JSONObject json1 = new JSONObject(jsonObject.get("account").toString()); 
JSONObject json2 = new JSONObject(json1.get("0").toString()); 
System.out.println(json2.get("user_id").toString()); 
+0

問題是,rootobj2爲空 – 2014-09-12 15:43:15

+0

它的工作原理謝謝 – 2014-09-13 08:10:35

1

您有兩個問題。首先,你實際上並沒有下降樹。初始化rootobj2這樣的:

JsonObject rootobj2 = (JsonObject) rootobj1.get("0"); // NOT rootobj.get("0"); 

其次,一旦rootobj2正確初始化,它不會有一個屬性"0"。試試這個:

String tel=rootobj2.get("tel").getAsString(); // NOT rootobj2.get("0").getAsString(); 
+0

我還建議在嘗試調用'.getAsString()'之前檢查在一個if語句中'rootob2.get(「tel」)'是否爲空。如果該值爲空,則可以通過使用虛擬值而不是拋出有用的異常來處理該問題。 – Kyle 2014-09-12 15:12:51

+0

我只是更新我的帖子,我仍然與rootobj2.get(「tel」)。getAsString(); – 2014-09-12 15:32:41

+0

rootobj2爲null的問題 – 2014-09-12 15:43:54