Невозможно проанализировать 2D-массив json и отобразить его содержимое - PullRequest
0 голосов
/ 26 июня 2018

Получаю 2d массив из API, анализирую ответ.Но я не могу получить эти значения.

Вот как я получаю ответ:

DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
String api_uri = "http://192.168.0.106/api/something/";
HttpGet httpget = new HttpGet(api_uri);

httpget.setHeader("Content-type", "application/json");

InputStream inputStream = null;
String result = null;

try {
 HttpResponse response = httpclient.execute(httpget);
 HttpEntity entity = response.getEntity();

 inputStream = entity.getContent();
 // json is UTF-8 by default
 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
 StringBuilder sb = new StringBuilder();

 String line = null;
 while ((line = reader.readLine()) != null) {
  sb.append(line + "\n");
 }
 result = sb.toString();
 Log.e("rAct", result);
} catch (Exception e) {
 // Oops
 Log.e("rActEr", e.toString());
} finally {
 try {
  if (inputStream != null) inputStream.close();
 } catch (Exception squish) {}
}

Строка result выглядит следующим образом:

[
    [
        {
            "id": 138,
            "name": "asdasd",
            "person_image": "http://something.in:9090/photos/14/1575.jpg",
            "person_description": "bla bla blaa",
            "bla_id": 1,
            "blabal_id": 2,
            "other_id": 7,
            "category": "asd"
        }
    ],
    [
        {
            "id": 257,
            "name": "asdasd",
            "person_image": "http://something.in/asd.jpg",
            "person_description": "asasdsad",
            "bla_id": 1,
            "blabal_id": 2,
            "other_id": 7,
            "category": "ASSSD"
        }
    ]
]

Итаксейчас пытаюсь прочитать данные как

try {
    jsonarray = new JSONArray(result);
    for (int i = 0; i < jsonarray.length(); i++) {
        jsonobject = jsonarray.getJSONObject(i);
        Log.e("testt", jsonobject.toString());
        ...
        ...
    }
}catch....

Я не могу получить что-либо из этого jsonobject Как получить данные name, person_image, person_description из результата.Я пытался получить их как jsonobject.optString("name"), но ничего не возвращалось.

С одноразмерными массивами я получил ответ, и я мог читать данные, следуя тем же способом, что и выше.

Что я долженнужно изменить, чтобы прочитать данные мне нужно?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Я предпочитаю использовать Gson с POJO , в этом случае он упаковывает ваш массив json в java.util.List of <YourPojo>

List<MyPojo> myPojoList= new Gson().fromJson(jsonArray.toString(), new TypeToken<List<MyPojo>>() {
                }.getType());

, и ваш pojo должен совпадатьс вашими атрибутами json

Таким образом, ваш класс должен выглядеть примерно так:

class MyPojo{
    private id;
    private String name ;
    private String person_image;
    private String person_description;
    private int bla_id;
    private int blabal_id;
    private int other_id;
    private String category;
}

, таким образом, вы будете напрямую связывать массив json с java Object

0 голосов
/ 26 июня 2018

Поскольку у вас есть массив массивов, попробуйте прочитать массив json вместо объект внутри внешнего массива:

try {
jsonarray = new JSONArray(result);
for (int i = 0; i < jsonarray.length(); i++) {
    jsonarrayInner = jsonarray.getJSONArray(i);
    //you can do one more loop here
    for (int i = 0; i < jsonarrayInner.length(); i++) {
        jsonobject = jsonarrayInner.getJSONObject(i);
        Log.e("testt", jsonobject.toString());
    }
    ...
    ...
}
}catch....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...