Мой PHP успешно возвращает JSON из моей таблицы SQL. Но мой Android-код хранит все в одной строке. Должно ли оно храниться в одной строке, а затем анализироваться на несколько объектов? Вот соответствующий код.
Во-первых, как выглядит сохраненный результат:
04-04 21:26:00.542: V/line(1230): [{"category":"elections","id":"0","title":"Who will you vote for in November's Presidential election?","published":"2012-04-02","enddate":"2012-04-30","responsetype":"0"},{"category":"elections","id":"2","title":"Question title, ladies and gents","published":"2012-04-02","enddate":"2012-04-30","responsetype":"1"}]
Таким образом, очевидно, что все просто хранится как одна огромная строка, хотя это две строки таблицы. Вот код, который создает для меня эту строку:
public JSONObject getQuestionJSONFromUrl(String url, List<NameValuePair> params) { // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { Log.v("while", line); sb.append(line + "\n"); //Log.v("err", line); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; }
Очевидно, я получаю всевозможные ошибки после моего цикла WHILE прямо сейчас. Я потратил пару дней, пытаясь разобраться в этом, но только что получил PHP, чтобы вернуть правильный JSON (которого ранее не было). Я ожидаю, что мне нужен JSONArray, каждый из результатов JSON будет храниться внутри одного индекса массива – так что я ожидаю, что вам нужно изменить возврат этого метода в JSONArray, верно? Может ли кто-нибудь привести меня к правильному пути для разбора JSON, который я получаю от своего PHP-скрипта?
Да, это правильно. Вам нужно разобрать его как JSONArray, так как это то, что есть. Например (игнорирование исключений и т. Д.):
JSONArray jarr = new JSONArray(jsonString); for (int i = 0; i < jarr.length(); ++i) { JSONObject jobj = jarr.getJSONObject(i); // work with object }