在用戶提交的字符串值'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?
你不解釋哪些測試/斷言失敗。 –
@StephenC請參閱更新的代碼片段 –