2010-07-30 52 views
0

我是JSON的新手。如何在java中處理未知類型的json響應

我需要從服務器接收響應(以字符串的形式)。該響應可以是像

{"a" : "value", "b" : "value2", ...} 

一個對象,如果該請求是成功的,或單一的字符串等上錯誤

"ERROR" 

使用org.json.JSONObject,我該如何檢查哪一個已被退回?


編輯

我覺得這可能是工作,但我不知道這是做正確的方式,

if(JSONString.equals("\"ERROR\"") { 
    //handle error 
} else { 
    //parse actual object 
} 

哪裏JSONString是包含服務器的String迴應

請問這項工作?

回答

1

字符串「ERROR」不是有效的JSON。看看JSONWriter API,你會看到沒有辦法產生像「ERROR」這樣的JSON字符串。

如果您始終想將服務器響應視爲json,則需要使其返回類似{「error」:true}或{error:false}的內容。您的程序將能夠反序列化檢查錯誤字段。

如果您沒有對服務器響應的控制權,那麼您需要在反序列化之前測試String.equals(「ERROR」)。

+0

我無法改變服務器響應的方式。這是第三方服務。 – 2010-07-30 14:40:19

+0

然後,您需要在反序列化之前測試String.equals(「ERROR」)。 – 2010-07-30 15:15:45

+0

請將您的評論移至您的答案。我接受它,但如果你將它移到那裏,它會更加整潔。 – 2010-08-02 14:22:09

0

既然你不能使第三方服務輸出有效的JSON,在你做json解析之前,只要做一個字符串比較來看看響應是否是「錯誤」。

0

在我看來,帶引號的字符串是一個有效的json值。 json.org中的語法沒有將對象或數組定義爲特殊的頂級生產,rfc 4627將json-text定義爲對象或數組,但json值也可以是數字,字符串,布爾值或空值。

從我的org.json的Javadoc閱讀以下應該工作:

Object value = new JSONTokener(inputString).nextValue(); 
if (value instanceof String && ((String)value).equals("ERROR")) { 
    // handle error 
} else if (value instanceof JSONObject) { 
    // handle response data 
} 

使用你不會受到在響應最終額外的空格的tokener。

+0

我明天再試。謝謝。 – 2010-07-30 23:14:57