Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 19.07.2015
Сообщений: 67

Jackson Parser не работает как надо

14.07.2016, 09:09. Показов 1984. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа?

Класс парсера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.prosoft.homework2.parsers;
 
import com.prosoft.homework2.instances.Human;
import com.prosoft.homework2.interfaces.IParse;
import org.apache.log4j.Logger;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
 
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
 
public class JacksonParser implements IParse{
    private static final Logger LOG = Logger.getLogger(JacksonParser.class);
 
    private String PATH_JSON;
    private ArrayList<Human> humanArrayList = new ArrayList<Human>();
 
    public JacksonParser(){}
    public JacksonParser(String PATH_JSON){
        this.PATH_JSON = PATH_JSON;
    }
 
    public ArrayList<Human> parse(){
        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode rootNode = mapper.readTree(new File(PATH_JSON));
            for (JsonNode currentCity : rootNode.path("country").get("city")) {
                //System.out.println("currentCity: " + currentCity.toString());
 
                for (JsonNode currentDistrict : currentCity.get("district")) {
                    //System.out.println("currentDistrict: " + currentDistrict.toString());
 
                    for (JsonNode currentHuman : currentDistrict.get("human")) {
                        //System.out.println("currentHuman: " + currentHuman.toString());
                        Human human = new Human();
                        human.setDistrictName(currentHuman.path("-districtName").getTextValue());
                        human.setId(currentHuman.path("-id").getTextValue());
                        human.setName(currentHuman.path("name").getTextValue());
                        human.setPhone(currentHuman.path("phone").getTextValue());
                        human.setCompany(currentHuman.path("company").getTextValue());
                        human.setPosition(currentHuman.path("position").getTextValue());
                        humanArrayList.add(human);
                    }
                }
            }
        }catch (IOException e) {
            LOG.error(e + "IOException");
        }catch (NullPointerException e) {
            LOG.error(e + "NullPointerException");
        }
 
        return humanArrayList;
    }
}
JSON файлик:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
{
  "country": {
    "-countryName": "USA",
    "city": [
      {
        "-cityName": "Dallas",
        "district": [
          {
            "-districtName": "Downtown",
            "human": [
              {
                "-id": "3",
                "name": "Barak Obama",
                "phone": "+375-15-94567845",
                "company": "USA",
                "position": "Director",
                "adress": "9211 Shoreview Rd"
              },
              {
                "-id": "2",
                "name": "Jason Born",
                "phone": "+380-44-454567845",
                "company": "EPAM",
                "position": "Cleaner",
                "adress": "743 Genoa Ave"
              }
            ]
          },
          {
            "-districtName": "East",
            "human": {
              "-id": "1",
              "name": "Bear Grills",
              "phone": "+340-71-44666445",
              "company": "National Geographic",
              "position": "Survivor",
              "adress": "1717 N Harwood St"
            }
          },
          {
            "-districtName": "Lake Highlands",
            "human": [
              {
                "-id": "4",
                "name": "Bob Marley",
                "phone": "+370-15-9467845",
                "company": "Sony Records",
                "position": "Singer",
                "adress": "2669 Myrtle Springs Ave Ste 104"
              },
              {
                "-id": "5",
                "name": "Mohammad Ali",
                "phone": "+322-22-2222222",
                "company": "HBO",
                "position": "Boxer",
                "adress": "1717 N Harwood St"
              },
              {
                "-id": "6",
                "name": "Chuck Norris",
                "phone": "+333-22-111111111",
                "company": "University",
                "position": "God",
                "adress": "2100 Irving Blvd"
              }
            ]
          }
        ]
      },
      {
        "-cityName": "Chicago",
        "district": {
          "-districtName": "Downtown",
          "human": {
            "-id": "7",
            "name": "Dr. Freeman",
            "phone": "+321-22-9999999",
            "company": "City 17",
            "position": "Scientist",
            "adress": "4436 Brass Way"
          }
        }
      }
    ]
  }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2016, 09:09
Ответы с готовыми решениями:

PHP Excel Parser - не работает нормально с изображениями.
Добрый день специалисты! Стоит задача распарсить эксель файл, c текстовыми и прочими полями проблем нет, но вот есть поле в...

Не работает как надо
В таблице ADOTList есть два поля: &quot;Сушилка&quot; и &quot;Код&quot;. Так вот. Нужно чтобы в DBEdit2 формы FRezultat отображалось поле &quot;Сушилка&quot;...

Запрос не работает как надо
Сильно не ругать ,я только начинаю осваивать 1с)) Есть внешняя печатная форма на которой должны выводиться склады из табличной части...

6
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
14.07.2016, 16:03
О каких null-значениях идёт речь? Я в json-е ни одного поля с таким значением не увидел.

Или тебя интересует, почему в результирующем списке human.getDistrictName() равен null? Так ты не в том узле ищешь.
Java
1
currentHuman.path("-districtName").getTextValue()
замени на
Java
1
currentDistrict.path("-districtName").getTextValue()
А вообще я бы посоветовал 2 вещи:
1. Использовать актуальную версию jackson-а. org.codehaus.jackson уже 3 года как не обновляется.
2. Создай классы нужной тебе иерархии и не парси ничего вручную. Если сильно хочется парсить руками, то делать это надо через Deserializer-ы.
1
0 / 0 / 1
Регистрация: 19.07.2015
Сообщений: 67
14.07.2016, 19:20  [ТС]
Цитата Сообщение от aleksandy Посмотреть сообщение
О
2. Создай классы нужной тебе иерархии и не парси ничего вручную. Если сильно хочется парсить руками, то делать это надо через Deserializer-ы.
Вы имеете ввиду классы с аннотациями?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
14.07.2016, 20:37
классы с аннотациями?
Для большинства случаев достаточно будет простых классов с полями и get/set методами. Аннотации нужны, если хочется чего-то нестандартное сделать. Для имени поля, содержащего знак препинания, например.
0
0 / 0 / 1
Регистрация: 19.07.2015
Сообщений: 67
14.07.2016, 21:29  [ТС]
А не могли бы Вы набросать код, как это выглядит. Не понимаю, как парсить в класс, если xml имеет сложную структуру.
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
15.07.2016, 07:49
Цитата Сообщение от drmind Посмотреть сообщение
xml имеет сложную структуру
В первом посте json.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class CountryContainer {
  Country country;
}
class Country {
  @JsonProperty("-countryName")
  String name;
  List<City> city;
}
class City {
  @JsonProperty("-cityName")
  String name;
  List<District> district;
}
class District {
  @JsonProperty("-districtName")
  String name;
  List<Human> human;
}
class Human {
  @JsonProperty("-id")
  String id;
  String name;
  String phone;
  String company;
  String position;
  String address;
}
Java
1
CountryContainer container = new ObjectMapper().readValue(yourJson, CountryContainer.class)
1
0 / 0 / 1
Регистрация: 19.07.2015
Сообщений: 67
18.07.2016, 12:26  [ТС]
Спасибо. Действительно, не надо ничего делать ручками. Всё заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2016, 12:26
Помогаю со студенческими работами здесь

Деление не работает как надо
я конечно не мастер но не пойму. У меня почему то не происходит деление. чтобы я не делал d присваивается 0 хз почему. //...

Не работает ролловер как надо
Здравствуйте! Никак не могу сделать казалось бы простую вещь. Мне нужно сделать кнопку-роллловер, которая менялась бы в том числе и при...

Программа не работает как надо
Вот допустим у нас есть код: znakomstv = False znakomstvo = zovut = while True: vopros = input(&quot;Чем я могу...

Parallel.For не работает как надо
Здравствуйте. Можете подсказать, что я делаю не так? public static int BmpToIntArray(Bitmap bmp) { ...

не работает функция как надо
Есть код пхп, то есть функция &lt;?php function getTable($cols, $rows, $color){ echo &quot;&lt;table border='1'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru