繁体   English   中英

如何在Java中处理未知类型的JSON响应

[英]How to handle unknown-type json response in java

我是JSON的新手。

我需要从服务器接收响应(以字符串形式)。 该响应可以是类似

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

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

"ERROR"

错误。

使用org.json.JSONObject ,如何检查返回了哪一个?


编辑

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

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

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

这可行吗?

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

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

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

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

我认为带引号的字符串是有效的json值。 json.org上的语法未将对象或数组定义为特殊的toveve形式,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
}

使用令牌生成器,您不会受到响应中最终其他空格的影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM