当前位置: 首页 > 面试题库 >

类型为java.lang.String的Android值…无法转换为JSONArray

江英华
2023-03-14
问题内容

我的项目有一个WCF,可以从数据库获取记录并以JSON格式返回,如下所示:

{"GetNotesResult":"[{\"ID\":1,\"Title\":\"Note 1\",\"Content\":\"Hello Vu Chien Thang\",\"CreatedBy\":\"thangvc\"},{\"ID\":2,\"Title\":\"Note 2\",\"Content\":\"Hello Nguyen Thi Ngoc\",\"CreatedBy\":\"thangvc\"}]"}

我也有一个Android应用程序来使用JSON,这是我的代码

private JSONArray getNotes(String UserName, String Password) {
        JSONArray jarray = null;
        JSONObject jobj = null;
        try{
            StringBuilder builder = new StringBuilder(URL);
            builder.append("UserName=" + loggedInUser.getUserName());
            builder.append("&");
            builder.append("Password=" + loggedInUser.getPassword());

            HttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(builder.toString());
            HttpResponse response = client.execute(httpGet);

            int status = response.getStatusLine().getStatusCode();

            if(status==200)
            {
                HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity,"utf-8");
                jobj = new JSONObject(data);
                jarray = jobj.getJSONArray("GetNotesResult");
            }
            else
            {
                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
            }
        }
        catch(ClientProtocolException e)
        {
            Log.d("ClientProtocol",e.getMessage());
        }
        catch(IOException e)
        {
            Log.d("IOException", e.getMessage());
        }
        catch(JSONException e)
        {
            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
        catch(Exception e)
        {
            Log.d("Unhandle Error", e.getMessage());
        }
        return jarray;
    }

我在处设置了断点,jarray = jobj.getJSONArray("GetNotesResult");并从中得到了以下消息JSONException

Value [{"ID":1,"Title":"Note 1","Content":"Hello Vu Chien Thang","CreatedBy":"thangvc"},{"ID":2,"Title":"Note 2","Content":"Hello Nguyen Thi Ngoc","CreatedBy":"thangvc"}] at GetNotesResult of type java.lang.String cannot be converted to JSONArray

我试图复制JSON字符串并粘贴到在线JSON解析器网站http://jsonviewer.stack.hu/上,它解析得很好。请帮我解决这个问题!


问题答案:

在您的json中,的值GetNotesResult包含在其中,""因此将其视为字符串而不是数组。

被解析为一个数组。

{"GetNotesResult":[{\"ID\":1,\"Title\":\"Note 1\",\"Content\":\"Hello Vu Chien Thang\",\"CreatedBy\":\"thangvc\"},{\"ID\":2,\"Title\":\"Note 2\",\"Content\":\"Hello Nguyen Thi Ngoc\",\"CreatedBy\":\"thangvc\"}]}

因此,解决方案是两件事之一:

  1. 如果可以修改服务器响应,请""从json数组周围删除。要么
  2. parse it first as string and then create a json array from that string..
        String notes = jobj.getString("GetNotesResult");
    jarray = new JSONArray(notes);


 类似资料:
  • 问题内容: 我有一个JSON文件,其中包含2个JSON数组:一个用于路线的数组,一个用于景点的数组。 一条路线应由用户导航到的多个景点组成。不幸的是我遇到了错误: JSONException:无法将类型为java.lang.String的值转换为JSONObject 这是我的变量和解析JSON文件的代码: Log.i(“ JSON Parser”,json); 告诉我在生成的字符串的开头有一个奇怪

  • 我在尝试按照firebase数据库的文档将数据检索到要使用的对象时,遇到了一个错误。 这是我的对象模型 最后,代码 这是我在Firebase中的数据库结构。 来自 logcat 的完整 Stacktrace 就在这里。

  • 这是控制器代码部分: 我收到这条消息: 出现错误(类型=错误请求,状态=400)。无法将类型[java.lang.String]的值转换为所需类型[java.util.Date];嵌套异常为org.springframework.core.convert.conversionfailedexception:无法将值“Wed Jun 08 00:00:00 WET 2016”从类型[java.lan

  • 我有两个实体,它们使用一个主键互相引用,主键是一个实体的整数。我不确定我做这件事的方式是否正确。 下面是引用主键id为int的实体 下面是我们从上面的实体中将外键设置为Kmichango kandaMchango的实体。 这里是表单的一部分,我在这里提交了用户在jumuiya_michango_form.html中提供的数据 下面是我的控制器中用于链接到表单和发布数据的两个方法 在我提交表单后,我

  • 问题内容: 我花了2天的时间找到问题的解决方案。 这是错误: 这是JSON: 用于获取字符串值的类: 这是转换为JSONArray: 我试图获取Json对象,然后将其转换为Json数组,但收到相同的错误。 问题答案: 问题是您的JSON格式不正确。我已经尝试过使用示例JSON,并找到了解决方案。现在,内置的JSONObject和JSONArray无法用于获取此类JSON响应。 您需要通过将其添加到

  • 我的spring应用程序无法将“日期”保存到“数据库”。错误在哪里? 错误 无法将类型为[java.lang.String]的属性值转换为属性bornDate所需的类型[java.sql.Date];嵌套的异常是java。lang.IllegalArgumentException:无法解析日期:无法解析的日期:“2016-11-02” mysql 实体 控制器 艾德曼。html