2012-05-14 95 views
0

爲了避免在幾乎一百個字段的每一次機會中檢查NullPointerExceptions的代碼,我想用「0」替換對象中的所有「空」引用。但是,下面的代碼完全沒有這樣做。JSONObject中的更新元素

private JSONObject vinfo; 
Iterator iter = vinfo.keys(); 
while(iter.hasNext()){ 
    String key = (String)iter.next(); 
    String value = vinfo.getString(key); 
    if (value==null){ 
     vinfo.put(key, "0"); 
    } 
} 

任何想法如何正確編碼?

+1

請你具體談談「的代碼不能在所有的工作。「?它會改變什麼嗎?我對C#不是很熟悉,但通常我會開始推動'print'來查看甚至執行了哪些代碼。 –

回答

0

使用String.replaceAll()到您的JSON字符串替換所有空值0

0

它不工作,因爲你的JSONObject不能包含「正常」 null值,因爲你不能把它們放到它,因爲的Javadoc對於JSONObject.put(String name, Object value)方法說:

如果值爲空,則會刪除任何現有的名稱映射。

所以行「String value = vinfo.getString(key)」處的「值」字符串將永遠不會是null。您應該檢查對JSONObject.NULL代替:

String key = (String)iter.next(); 
if (vinfo.isNull(key)) { 
    vinfo.put(key, "0"); 
} 

再說,我不知道這行:vinfo.put(key, "0");不會給你ConcurrentModificationException

+0

謝謝,a.ch.! 只是爲了記錄和可能幫助他人,JSONObject.NULL沒有這樣做,但「if(value ==」null「)」did ;-) – richey

+0

對不起,這是我的錯誤。你實際上應該使用'JSONObject.isNull(name)' - 查看編輯的答案。 –