2011-08-12 91 views
0

我開始使用JSON:爲什麼JSONObject.optString將垃圾添加到我的字符串?

{ 
    "Key1" : "Value1", 
    "Key2" : "Value2" 
} 

我然後硬編碼此JSON字符串中的:

String json = "{ \"Key1\" : \"Value1\", \"Key2\" : \"Value2\" }"; 

接下來,我試圖解析JSON:

JSONObject content = null; 
try { 
    content = new JSONObject(json); 
} catch (JSONException e) { 
    e.printStackTrace(); 
    return null; 
}  

String key1 = content.optString("Key1", null); 

如果我查看從調用JSONObject創建的散列表,它看起來是正確的:

{Key2=Value2, Key1=Value1} 

但是,當我看到在調試器中的字符串鍵1的值,我得到這個:

[V, a, l, u, e, 1, U, U, U, U, U, U, U, U, U, U] 

其中U似乎是Unicode字符25A1(白方)。我也試過了泛型get(「Key1」)方法,將結果轉換爲字符串,我得到相同的行爲?!???????????

+0

以下是什麼回報? '「Value1」.equals(key1);' –

+0

也許我在這裏走了,但定義一個像這樣的JSON對象似乎對所有轉義字符都很痛苦。你有沒有嘗試過使用myJsonObject.put(string key,object value)來查看存儲的內容? – Jack

+0

@Jack這很痛苦,但它只是一個簡單的黑客疑難解答。 –

回答

3

我沒有看到一個問題與您的代碼,因爲這輕微的修改似乎工作:

public static void main(String[] args) 
{ 
    String json = "{ \"Key1\" : \"Value1\", \"Key2\" : \"Value2\" }"; 

    JSONObject content = null; 
    try 
    { 
     content = new JSONObject(json); 
    } 
    catch (JSONException e) 
    { 
     e.printStackTrace(); 
     return; 
    } 

    String key1 = content.optString("Key1", null); 
    System.out.print(key1 + "end!"); 
} 

控制檯輸出這樣說:Value1end!

看時在調試器的代碼中,我看到:

enter image description here

如果我想冒險猜測,它可能只是調試器用來保存String的附加緩衝區空間。你有沒有試過看看你的代碼認爲它是什麼?

"Value1".equals(key1); //should return true if everything is working correctly. 
+0

我的評價也是如此。也許是在調試垃圾,我擔心的是,一旦我解析了一個更復雜的對象,那麼我的數組和子對象就會被污染。我可能太偏執了。 –

+0

有時最好只編寫它,看看會發生什麼:) –

相關問題