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.lang.ClassCastException:java.lang.String不能强制转换为org.json.JSONObject_Java_Json - Fatal编程技术网

java.lang.ClassCastException:java.lang.String不能强制转换为org.json.JSONObject

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

我点击了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":["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。我已经在我的帖子中展示了它。这不应该发生。你试过我上面说的方法吗?如果是,你能分享你的代码和错误跟踪吗?