2013-10-17 43 views
0

在用戶提交的字符串值'null'被存儲到數據庫中的最近一個問題中出現''null''。基本上雙引號被添加在字符串的開始和結尾。字面值'null'的非空字符串處理不正確 - JSON-lib中的BUG

調查顯示JSON-lib似乎沒有正確處理'null'字符串值。這通過以下測試方法展現出來。

@Test 
public void shouldHandleNullStringInJsonFormattedString() { 
    String jsonTest = "[\"null\",\"aValue\"]"; 
    assertTrue(jsonTest.contains("\"null\"")); 
    assertFalse(jsonTest.contains("\"\\\"null\\\"\"")); 
    String convertedBack = JSONSerializer.toJSON(jsonTest).toString(); 
    // fails at below line 
    assertFalse(convertedBack.contains("\"\\\"null\\\"\"")); 
} 

@Test 
public void shouldHandleNullStringLiteral() { 
    JSONArray jsonArray1 = JSONArray.fromObject(Arrays.asList(null,"b")); 
    JSONArray jsonArray2 = JSONArray.fromObject(Arrays.asList(JSONNull.getInstance(),"b")); 
    JSONArray jsonArray3 = JSONArray.fromObject(Arrays.asList("null","b")); 
    assertEquals("[null,\"b\"]", jsonArray1.toString()); 
    assertEquals("[null,\"b\"]", jsonArray2.toString()); 
    //fails at below line 
    assertEquals("[\"null\",\"b\"]", jsonArray3.toString()); 
} 

基本上當瀏覽器發送[ 「空」, 「安勤」]到服務器,JSON-LIB的改變它爲[ 「\」 空\ 「」, 「安勤」]。 另外從服務器端我們無法使用JSONArray構造像[「null」,「b」]這樣的JSON格式的字符串。 JSON-lib似乎沒有正確處理這兩個基本情況。

已通過電子郵件發送到在其網站上發送的郵件列表和聯繫郵件,但尚未回覆。好像之前有人張貼了關於這個問題的

http://sourceforge.net/p/json-lib/discussion/587134/thread/faf83e9a/

但沒有任何反應。

任何機構對此問題有任何建議/修復?

我們正在使用最新版本的JSON-lib中即2.4

更新

看着JSON LIB net.sf.json.util.JSONUtils.mayBeJSON方法的源代碼是不是有點奇怪的。

public static boolean mayBeJSON(String string) { 
     return string != null 
      && ("null".equals(string) 
        || (string.startsWith("[") && string.endsWith("]")) || (string.startsWith("{") && string.endsWith("}"))); 
    } 

似乎任何文字字符串'null'的值被認爲是JSON?

+0

你不解釋哪些測試/斷言失敗。 –

+0

@StephenC請參閱更新的代碼片段 –

回答

0

任何機構對此問題有任何建議/修復?

我的建議是從github下載並構建最新版本(項目「aalmiray/Json-lib」)。首先嚐試「主」分支,然後嘗試「開發」分支,最後看看存在的各種分支。

如果這不能給你一個答案,請創建自己的分支併爲自己開發一個修復程序...然後發送一個請求以將其合併。


B計劃將尋找一個替代json-lib問題更快地解決問題。這個項目的所有者似乎將永遠處理問題並根據合併請求採取行動。

+0

請參閱編輯..我們使用的是最新版本2.4 –

+0

是的......但「開發」分支在2.4之前......並且還有各種未合併的請求。 –

+0

不想依賴非發佈版本的源代碼並繼承另一組錯誤......我也沒有看到任何分支上的JSONUtils.mayBeJson方法的更新(我可能會誤解和問題可能是其他地方..) –

相關問題