Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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,我正在创建服务器健康检查页面。大多数服务器返回JSONObject,我可以使用以下方法轻松解析它: String jsonText = readAll(br); JSONObject json = new JSONObject(jsonText); JSONObject resp = json.getJSONObject("Response"); 现在我的问题是其他不返回JSON的服务器。一些返回字符串,一些pdf文件,一些图像,因为所有的回答都是200 OK,我应

我正在创建服务器健康检查页面。大多数服务器返回JSONObject,我可以使用以下方法轻松解析它:

String jsonText = readAll(br);              
JSONObject json = new JSONObject(jsonText);
JSONObject resp = json.getJSONObject("Response");
现在我的问题是其他不返回JSON的服务器。一些返回字符串,一些pdf文件,一些图像,因为所有的回答都是200 OK,我应该返回肯定的healthcheck

但是,我正在使用未来的线程,并在4秒后超时请求。所有返回除JSON以外的任何内容的服务器都会被困在“newJSONObject(jsonText);”

有没有办法检查respone的类型是JSON还是不是Java

更新:

我发现了我的错误——愚蠢的错误。 在try-catch块中,我只捕获IOException,而没有捕获JSONException(并且也没有显示任何错误-不知道)。我已经为JSONException添加了一个新的catch块,它目前适用于我的解决方案


然而,这不是一个优雅的解决方案,@Dave、@Radai和@Koi的解决方案是正确的解决方案。

不要解析字符串。返回一步,检查HTTP响应的
内容类型
头。如果响应包含JSON数据,
内容类型应为
application/JSON
()。

使用response.getMediaType()检查响应中的媒体类型。如果是json,则返回application/json。

尝试将其解析为json。如果不解析,就不是JSON。检查响应的内容类型。如果是文件,请检查扩展名。等等,他们为什么被卡住了?我希望会抛出一些异常。。您是将整个响应读入字符串还是直接从输入流运行json解析器?Dave我已经在尝试将其解析为json。我将以字符串“jsonText”获取响应,然后将该文本放入JSONObject中。我在第二步被卡住了。@radai我是1。获取字符串和2中的响应。用这个jsonText创建JSONObject我在第二步遇到了麻烦。除了我的线程超时之外,没有引发任何异常。您还应该检查响应的内容类型头;JSON内容应以
application/JSON
的形式发送,我不认为这是一种保证,是吗?@woot4Moo可能JSON响应的内容类型不正确,但这是官方认可的格式。因此,答案是正确的。不过,你可以检查,以确保通过把试抓块-这就是我正在做的。谢谢。这正是我想要的。