android中的JSON解析:x错误没有值

Clo*_*ife 2 parsing android json

这是我在AsyncTask中使用的代码

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);    
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");

HttpResponse response = httpClient.execute(request);

HttpEntity responseEntity = response.getEntity();

char[] buffer = new char[(int)responseEntity.getContentLength()];
    InputStream stream = responseEntity.getContent();
    InputStreamReader reader = new InputStreamReader(stream);
    reader.read(buffer);
    stream.close();

    result = new String(buffer);
    return result;
Run Code Online (Sandbox Code Playgroud)

这将返回一个字符串结果,在我的onPostExecute方法中,我尝试解析该输入字符串:

JSONObject vehicle = new JSONObject(new String(result));
makeEdit.setText(vehicle.getString("make"));
plateEdit.setText(vehicle.getString("plate"));
modelEdit.setText(vehicle.getString("model"));
yearEdit.setText(vehicle.getString("year"));
Run Code Online (Sandbox Code Playgroud)

一旦它到达makeEdit.setText就会抛出一个错误 - 没有make的值.我对android很新,所以如果有一些明显的错误,不要发送死亡威胁.输入文本是以下JSON字符串:

{"GetJSONObjectResult":{"make":"Ford","model":"Focus","plate":"XXO123GP","year":2006}}
Run Code Online (Sandbox Code Playgroud)

ari*_*ayu 9

No value for x error在处理JSON时,消息很常见.这通常是由于忽略了代码.

通常,当我使用JSON时,我首先尝试看到人类可读的结构.为此,我通常使用JSONViewer.

在您的情况下,结构是这样的:

在此输入图像描述

你看到它make在另一个叫做的对象中GetJSONObjectResult.因此,要获得它,您必须首先获取容器对象:

JSONObject vehicle = ((JSONObject)new JSONObject(result)).getJSONObject("GetJSONObjectResult");
//a more easy to read
JSONObject container = new JSONObject(result);
JSONObject vehicle = container.getJSONObject("GetJSONObjectResult");
Run Code Online (Sandbox Code Playgroud)

最后使用该对象获取make:

makeEdit.setText(vehicle.getString("make"));
plateEdit.setText(vehicle.getString("plate"));
modelEdit.setText(vehicle.getString("model"));
yearEdit.setText(vehicle.getString("year"));
Run Code Online (Sandbox Code Playgroud)

  • @DheereshSingh你是对的.我只是复制粘贴他的代码并添加我的修复程序. (2认同)