如何在java中处理未知类型的json响应
我是JSON新手 我需要从服务器接收响应(以字符串的形式)。该响应可以是类似于如何在java中处理未知类型的json响应,java,json,Java,Json,我是JSON新手 我需要从服务器接收响应(以字符串的形式)。该响应可以是类似于 {"a" : "value", "b" : "value2", ...} 如果请求成功,或使用单个字符串,如 "ERROR" 错误 使用org.json.JSONObject,如何检查返回的是哪一个 编辑 我想这可能行得通,但我不确定这是不是正确的方法 if(JSONString.equals("\"ERROR\"") { //handle error } else { //parse actu
{"a" : "value", "b" : "value2", ...}
如果请求成功,或使用单个字符串,如
"ERROR"
错误
使用org.json.JSONObject
,如何检查返回的是哪一个
编辑 我想这可能行得通,但我不确定这是不是正确的方法
if(JSONString.equals("\"ERROR\"") {
//handle error
} else {
//parse actual object
}
其中JSONString
是包含服务器响应的字符串
这行吗?字符串“ERROR”不是有效的JSON。查看API,您将发现无法生成类似“ERROR”的JSON字符串
如果总是希望将服务器响应视为json,则需要让它返回类似{“error:true}或{error:false}的内容。然后,您的程序将能够反序列化检查错误字段
如果您无法控制服务器响应,则需要在反序列化之前测试String.equals(“ERROR”)。因为您无法使第三方服务输出有效的json,所以在进行json解析之前,只需进行字符串比较,以查看响应是否为“ERROR”。在我看来,带引号的字符串是有效的json值。org上的语法没有将对象或数组定义为特殊的topleve产品,rfc 4627将json文本定义为对象或数组,但json值也可以是数字、字符串、布尔值或null 从我对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
}
使用标记器,您不会受到响应中最终附加空格的影响。我无法更改服务器响应的方式。这是第三方服务。在反序列化之前,您需要测试String.equals(“错误”)。请将您的注释移至您的答案。我接受了,但是如果你把它搬到那里会更整洁。