Парсинг json в java

312
18 апреля 2017, 07:40

Хочу сделать так, чтобы i-тому элементу hostidList соответствовал i-тый host (тип ArrayList). Но проблема в том, что не могу корректно то ли ввести, то ли вывести по тому же принципу. json:

{
  "jsonrpc": "2.0",
  "result": [
    {
      "hostid": "10106",
      "host": "Yandex DNS",
      "interfaces": [
        {
          "interfaceid": "2",
          "ip": "77.88.8.8"
        }
      ]
    },
    {
      "hostid": "10107",
      "host": "OpenDns",
      "interfaces": [
        {
          "interfaceid": "3",
          "ip": "208.67.222.222"
        },
        {
          "interfaceid": "46",
          "ip": "105.67.222.5"
        }
      ]
    }
  }

Код:

public static void main(String[] args) {
        System.out.println(json);
        List<String> hostidList = new ArrayList<>();
        List<String> hostList  = new ArrayList<>();
        List<List> interfacesList = new ArrayList<>();

        JSONObject jsonObj = new JSONObject(json);
        // Getting JSON Array node
        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");
            hostidList.add(hostid);
            hostList.add(host);

            List<String> list = new ArrayList<>();
            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");

                list.add(interfaceid);
                list.add(ip);
            }
            interfacesList.add(list);
        }
        for (int i = 0; i < hostList.size(); i++){
            System.out.println("hostid = "+hostidList.get(i));
            System.out.println("host = "+hostList.get(i));

            for (int i1 = 0; i1 < (interfacesList.get(i).size()); i1++) {
                System.out.println("interfacesid = "+interfacesList.get(i).get(i1).toString());
                System.out.println("ip = "+interfacesList.get(i).get(i1).toString());
            }
            System.out.println("-----------------------");
        }
    }

Ответ:

hostid = 10106
host = Yandex DNS
interfacesid = 2
ip = 2
interfacesid = 77.88.8.8
ip = 77.88.8.8
-----------------------
hostid = 10107
host = OpenDns
interfacesid = 3
ip = 3
interfacesid = 105.67.222.5
ip = 105.67.222.5
interfacesid = 46
ip = 46
interfacesid = 105.67.222.5
ip = 105.67.222.5
-----------------------
READ ALSO
Как сравнить String и StringBuffer?

Как сравнить String и StringBuffer?

Нужно определить, является ли введенный текст палиндромомПалиндро́м — буквосочетание, слово или текст, одинаково читающееся в обоих направлениях

247
Кастомные jpa update/delete query

Кастомные jpa update/delete query

Откуда код вызывается:

246
Путь к картинкам в JAR файле

Путь к картинкам в JAR файле

Собрал проект мавеном в JAR файлВнутри архива есть папка с картинками, однако не могу понять, как прописать путь к этим файлам так, чтобы можно...

289