Java 解析JSON时出错,但代码似乎正常

Java 解析JSON时出错,但代码似乎正常,java,android,json,parsing,exception,Java,Android,Json,Parsing,Exception,首先,谢谢你阅读我的问题 由于一个web请求,我得到了以下Json {"GetCommunicationsResult":" {\"Rows\": [{\"Data\":\"2011-12-16T00:00:00\",\"Teacher\":\"Surname Name\", \"Communication\":\"bla bla bla and bla bla bla\"}, {\"Data\":\"2011-10-18T00:00:00\",\

首先,谢谢你阅读我的问题

由于一个web请求,我得到了以下Json

{"GetCommunicationsResult":"
   {\"Rows\":
      [{\"Data\":\"2011-12-16T00:00:00\",\"Teacher\":\"Surname Name\",
       \"Communication\":\"bla bla bla and bla bla bla\"},

       {\"Data\":\"2011-10-18T00:00:00\",\"Teacher\":\"Surname Name\",
        \"Communication\":\"bla bla bla and bla bla bla\"}]
   }"
 }
我需要解码才能使用我的程序

  • 首先,我获取JSON作为字符串资源

    JSONObject jsonData = readUrl("http://myWebSite/folder/site.svc/Communications/000884");
    
    (readurl是一个以字符串形式返回json的方法)

  • 然后使用这个字符串创建一个JSONObject

    JSONObject BaseObject = new JSONObject(jsonData);   
    
    (奇怪的是,JSONObject构造函数没有提供任何Inputstream或Reader 参数,但仅限字符串或类似项)

  • 最后,我尝试减少JSON

    JSONObject DerivatedObject=BaseObject.getJSONObject("GetCommunicationsResult");
    
  • 但我遇到了一个奇怪的例外:

    Value {"Rows":[{"Data":"2011-12-16T00:00:00","Teacher":"Surname Name","Communication":"bla bla bla and bla bla bla"},{"Data":"2011-10-18T00:00:00","Teacher":"Surname Name","Communication":"bla bla bla and bla bla bla"}]} 
    at GetCommunicationsResult of type java.lang.String cannot be converted to JSONObject
    
    对如何解决这个问题有什么建议吗?

    我不知道为什么我的代码实际上找到了JSON,但它无法对其进行解码。

    您的引用有误。请参阅此行上的最后一个开放报价:

    {"GetCommunicationsResult":"
    
    这会导致值是字符串而不是JSONObject。您可以判断它是一个字符串,因为JSON中的所有其他“”都被转义:

    {\"Rows\":
    
    应该是,

    {"Rows":
    
    因此,服务器上出现了导致该问题的错误。可能您正在放置以下内容:

    jsonObject.put("GetCommunicationsResult", someJsonObject.toString() );
    

    您的报价有误。请参阅此行上最后一个打开的报价:

    {"GetCommunicationsResult":"
    
    这导致值是字符串而不是JSONObject。您可以判断它是字符串,因为JSON中的所有其他“”都被转义:

    {\"Rows\":
    
    应该是,

    {"Rows":
    
    因此,服务器上出现了导致该问题的错误。也许你在说这样的话:

    jsonObject.put("GetCommunicationsResult", someJsonObject.toString() );