Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中处理未知类型的json响应_Java_Json - Fatal编程技术网

如何在java中处理未知类型的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

我是JSON新手

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

{"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(“错误”)。请将您的注释移至您的答案。我接受了,但是如果你把它搬到那里会更整洁。