Парсинг json в java (массив в массиве)

334
20 апреля 2017, 15:06

Пытался вот парсить json-файл. Этот список позже нужно пихнуть в адаптер на Android. Но пока проблема в парсинге. Сложность в том, что тут массив в массиве. Тут (это старый код, но тот же json-файл) не очень помогли. Вот что я хотел сделать:

Json:

{
  "result": [
    {
      "hostid": "10106",
      "host": "Yandex DNS",
      "interfaces": [
        {
          "interfaceid": "9",
          "ip": "77.88.8.8"
        },
        {
          "interfaceid": "13",
          "ip": "77.88.8.8"
        }
      ]
    },
    {
      "hostid": "10106",
      "host": "Yandex DNS",
      "interfaces": [
        {
          "interfaceid": "6",
          "ip": "77.88.8.8"
        },        
      ]
    }
  }
}

А это код:

public class Main {
    private static String json; //тут json
    public static void main(String[] args) {
        ParseJson parseJson = new ParseJson();
        parseJson.parse(json);
        List<ObjectsOfParse> resultParse = parseJson.getCompleteParse();
        for (int i = 0; i < resultParse.size(); i++) {
            List<String[]> aaa = resultParse.get(i).getHostAndHostId();
            System.out.println("hostid = " + aaa.get(i)[0]);
            System.out.println("host = " + aaa.get(i)[1]);
            List<String[]> bbb = resultParse.get(i).getInterfasesList();
            for (int i1 = 0; i1 < bbb.get(i).length; i1++) {
                System.out.println("interfacesid = " + bbb.get(i1)[0]);
                System.out.println("ip = " + bbb.get(i1)[1]);
            }
            System.out.println("-----------------------");
        }
    }
}
public class ParseJson {
    private List<ObjectsOfParse> completeParse = new ArrayList<ObjectsOfParse>();
    public List<ObjectsOfParse> getCompleteParse() {
        return completeParse;
    }
    public void setCompleteParse(List<ObjectsOfParse> completeParse) {
        this.completeParse = completeParse;
    }
    private ObjectsOfParse objectsOfParse = new ObjectsOfParse();
    public void parse(String json) {
        List<String> hostidList = new ArrayList<>();
        List<String> hostList = new ArrayList<>();
        List<List> interfacesList = new ArrayList<>();
        JSONObject jsonObj = new JSONObject(json);
        JSONArray array = jsonObj.getJSONArray("result");
        // looping through All Contacts
        for (int i = 0; i < array.length(); i++) {
            JSONObject jsonObject = array.getJSONObject(i);
            String hostid = jsonObject.getString("hostid");
            String host = jsonObject.getString("host");
            objectsOfParse.addHostidAndHost(hostid, host); 
            JSONArray jsonArray = jsonObject.getJSONArray("interfaces");
            for (int i1 = 0; i1 < jsonArray.length(); i1++) {
                jsonObject = jsonArray.getJSONObject(i1);
                String interfaceid = jsonObject.getString("interfaceid");
                String ip = jsonObject.getString("ip");
                objectsOfParse.addInterfaces(interfaceid,ip);  
            }   
            completeParse.add(objectsOfParse);   
        }
    }
}
public class ObjectsOfParse {
    private List<String[]> interfasesList = new ArrayList<>();
    private List<String[]> hostAndHostId = new ArrayList<>();
    private String host, hostid;   
    public ObjectsOfParse() {}
    public List<String[]> getHostAndHostId() {
        return hostAndHostId;
    }
    public void setHostAndHostId(List<String[]> hostAndHostId) {
        this.hostAndHostId = hostAndHostId;
    }
    public List<String[]> getInterfasesList() {
        return interfasesList;
    }
    public void setInterfasesList(List<String[]> interfasesList) {
        this.interfasesList = interfasesList;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public String getHostid() {
        return hostid;
    }
    public void setHostid(String hostid) {
        this.hostid = hostid;
    }
    public void addInterfaces(String interfacesid, String ip){
        String[] interfArray = {interfacesid, ip};
        interfasesList.add(interfArray);
    }
    public void addHostidAndHost(String hostid, String host){
        String[] interfArray = {hostid, host};
        hostAndHostId.add(interfArray);
    }    
}
Answer 1

Используем библиотеку Gson (https://github.com/google/gson)

Нужно создать аналогичную json-у объектную модель (модификаторы доступа, геттеры и сеттеры опустил для экономии):

class Result {
    List<Host> result;
}
class Host {
    String hostid;
    String host;
    List<Interface> interfaces;
}
class Interface {
    String interfaceid;
    String ip;
}

Парсим json:

Gson gson = new Gson();
Result result = gson.fromJson(YOUR_JSON, Result.class);

Используем объект result так, как хотим.

READ ALSO
Authentication for VideoView URL

Authentication for VideoView URL

Доброго времени суток! Мучаюсь уже не первый день с воспроизведением видео с web-сервера, который требует авторизацию

158
Критика кода одного приложения

Критика кода одного приложения

Всем привет! Хотелось бы узнать ваше мнение насчет того как я пишу код приложенийПрошу строго судить, показать пальцем на все, за что могут...

182
Доступ к Tomcat Manager

Доступ к Tomcat Manager

На выделенном сервере установил tomcatЗахожу по адресу IP или по домену (установил в server

314