如何在java中处理未知类型的json响应

时间:2010-07-30 13:05:43

标签: java json

我是JSON的新手。

我需要从服务器接收响应(以String的形式)。该响应可以是像

这样的对象
{"a" : "value", "b" : "value2", ...}

如果请求成功,或单个字符串如

"ERROR"

出错。

使用org.json.JSONObject,如何查看哪一个已被退回?


修改

我认为这可行,但我不确定这是否是正确的方法

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

其中JSONString是包含服务器响应的字符串

这可行吗?

3 个答案:

答案 0 :(得分:2)

字符串“ERROR”无效JSON。查看JSONWriter API,您将看到无法生成类似“ERROR”的JSON字符串。

如果您总是希望将服务器响应视为json,则需要返回类似{“error”:true}或{error:false}的内容。然后,您的程序将能够反序列化检查错误字段。

如果您无法控制服务器响应,则需要在反序列化之前测试String.equals(“ERROR”)。

答案 1 :(得分:0)

由于在进行json解析之前无法使第三方服务输出有效json,只需进行字符串比较以查看响应是否为“错误”。

答案 2 :(得分:0)

在我看来,带引号的字符串是一个有效的json值。 json.org上的语法没有将对象或数组定义为特殊的forpleve产品,rfc 4627将json-text定义为对象或数组,但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
}

使用tokener,您不会受到响应中最终附加空格的影响。