java.lang.ClassCastException:java.lang.String不能强制转换为org.json.JSONObject
我点击了API,得到了如下响应java.lang.ClassCastException:java.lang.String不能强制转换为org.json.JSONObject,java,json,Java,Json,我点击了API,得到了如下响应 {"headers":{"Keep-Alive":["timeout=4, max=500"],"Server":["Apache"],"X-Content-Type-Options":["nosniff"],"Connection":["Keep-Alive"],"Vary":["X-Forwarded-For"],"X-XSS-Protection":["1;mode=block"],"Content-Length":["451"],"Content-Type
{"headers":{"Keep-Alive":["timeout=4, max=500"],"Server":["Apache"],"X-Content-Type-Options":["nosniff"],"Connection":["Keep-Alive"],"Vary":["X-Forwarded-For"],"X-XSS-Protection":["1;mode=block"],"Content-Length":["451"],"Content-Type":["application/hal+json"]},"statusCodeValue":200,"body":"{\"id\":\"7199\",\"username\":\"johntest@example.com\",\"start_time\":1583212261,\"expire_time\":1583253338,\"sponsor_profile\":\"1\",\"enabled\":false,\"current_state\":\"disabled\",\"notes\":null,\"visitor_carrier\":null,\"role_name\":\"[Guest]\",\"role_id\":2,}
然后我尝试获取主体。我获取主体,但我无法获取主体下的用户名。基本上,我的主要目的是获取用户名。它抛出此错误
java.lang.ClassCastException: java.lang.String cannot be cast to org.json.JSONObject
我试图获取用户名的逻辑
ResponseEntity<String> resp = restTemplate.exchange(
reader.getAccountURL() + request.getUsername(),
HttpMethod.GET, entity, String.class);
JSONObject accountDetails = new JSONObject(resp);
Object getBody = accountDetails.get("body");
Object alreadyExits = ((JSONObject) getBody).get("username");
ResponseEntity resp=restemplate.exchange(
reader.getAccountURL()+request.getUsername(),
HttpMethod.GET、实体、字符串.class);
JSONObject accountDetails=新JSONObject(resp);
对象getBody=accountDetails.get(“body”);
对象alreadyExits=((JSONObject)getBody.get(“用户名”);
我做错了什么?JSONObject只是一个作用于键值的映射。 如果键返回的值是map(即键-值对),则可以将其转换为JSONObject,但在您的情况下,
getBody.get(“用户名”)
返回johntest@example.com
这是一个简单的字符串,不是键值对,因此会出现此异常
用法:JSONObject getBody=accountDetails.getJsonObject(“body”)
或者您可以使用:
String bodyString= accountDetails.getString("body");
JSONObject getBody= new JSONObject(bodyString)
然后使用
对象alreadyExits=((字符串)getBody.get(“用户名”)代码>,它应该可以正常工作。JSONObject只是一个映射,可以处理键值。
如果键返回的值是map(即键-值对),则可以将其转换为JSONObject,但在您的情况下,getBody.get(“用户名”)
返回johntest@example.com
这是一个简单的字符串,不是键值对,因此会出现此异常
用法:JSONObject getBody=accountDetails.getJsonObject(“body”)
或者您可以使用:
String bodyString= accountDetails.getString("body");
JSONObject getBody= new JSONObject(bodyString)
然后使用对象alreadyExits=((字符串)getBody.get(“用户名”)代码>,它应该可以正常工作。按照以下步骤操作:
获取正文字符串:stringbodystring=resp.getString(“正文”)代码>
将bodyString解析为jsonObject:jsonObject body=newjsonobject(bodyString)代码>
获取用户名:String usename=body.getString(“用户名”)代码>
这应该是可行的。按照以下步骤操作:
获取正文字符串:stringbodystring=resp.getString(“正文”)代码>
将bodyString解析为jsonObject:jsonObject body=newjsonobject(bodyString)代码>
获取用户名:String usename=body.getString(“用户名”)代码>
这应该是可行的。尝试getJsonObject(“body”)
而不是get(“body”)
。看起来您的响应是HTTP响应的JSON化。因此,body只是一个字符串值,它编码了另一个JSON对象,因此您需要再次解析body
值。@Arnaud当我这样做时,我得到这个异常org.JSON.JSONException:JSONObject[“body”]不是一个JSONObject。@JoachimSauer。您能告诉我如何做吗?尝试getJsonObject(“body”)
而不是get(“body”)
。看起来您的响应是HTTP响应的JSON化。因此,body只是一个字符串值,它对另一个JSON对象进行编码,因此您需要再次解析body
值。@Arnaud当我这样做时,我得到这个异常org.JSON.JSONException:JSONObject[“body”]不是一个JSONObject.@JoachimSauer.你能告诉我怎么做吗?当我尝试时,它给出了这个:get(string)方法对于类型Stringyou必须将body也转换为jsonobject,我已经更新了我的答案我尝试过了,但是我得到了我在帖子中提到的相同错误帖子中提到的json不是有效的json,所以你能给出正确的json以便调试吗..你可以在我尝试的时候验证它,它给出了这个:方法get(String)对于类型Stringyou必须将body也转换为jsonobject,我已经更新了我的答案。我尝试了它,但我得到了我在帖子中提到的相同错误帖子中提到的json不是有效的json,所以请您提供正确的json以便对其进行调试。我假设您可以验证它,你的body
是一个有效的json对象字符串。我尝试了它,但它告诉我一个错误,说username not found打印你在body字符串中得到的内容,看看它是否包含username
,最好共享你的代码,outpuit确实包含username。我已经在帖子中显示了它。这不应该发生。你试过我上面说的方法吗?如果是,你能分享你的代码和错误stacktrace吗?我假设你的正文
是一个有效的json对象字符串,我试过了,但它告诉我一个错误,说username not found打印你正文字符串中的内容,看看它是否包含username
,更好地共享你的代码和输出。它确实包含username。我已经在我的帖子中展示了它。这不应该发生。你试过我上面说的方法吗?如果是,你能分享你的代码和错误跟踪吗?