Хорошо, поэтому я использую Джексона для анализа файла JSON, проблема в том, что файл представляет собой один большой безымянный массив. Это в формате:

[ {json stuff}, {json stuff}, ..., {json stuff} ]

Все json stuff - это просто регулярные выражения JSON, с которыми мне придется иметь дело, когда я действительно получу это в массиве.

Я не могу найти никаких реальных руководств о том, как отображать объекты с помощью Джексона, но мне нужно найти способ сопоставить каждую из этих разных вещей в массиве, а затем проанализировать каждую конкретную вещь с помощью Джексона на отдельные компоненты. есть идеи как это сделать?

P.S. Единственное настоящее руководство, которое я смог найти, было следующее: http: // www. .studytrails.com / java / json / java-jackson-Data-Binding.jsp.

Где DataSet [] - это массив, названный в файле. Я хочу выяснить, как делать то, что делает этот учебник, за исключением приведенного выше примера, где массив не начинается с имени.

P.P.S. Вот код, который я использую:

Базовый код Джексона для отображения в моем элементе:

ObjectMapper mapper = new ObjectMapper();
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

    URL url = null;
    try {
        url = new URL("my JSON URL");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    try {
        ContactInfo contacts = mapper.readValue(url, ContactInfo.class);
    } catch (JsonParseException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

Тогда мой класс ContactInfo - это просто геттеры и сеттеры с определенными полями в URL-адресе JSON. Проблема в том, что без имени массива, который разбивает все различные узлы JSON, я не знаю, как получить доступ к отдельным значениям контактов, или если они перезаписываются.

2
Bill L 6 Мар 2014 в 22:28
Просто используйте List<Whatever> или Whatever[].
 – 
Sotirios Delimanolis
6 Мар 2014 в 22:28
У вас есть какой-нибудь код, который вы можете опубликовать из того, что вы пробовали до сих пор?
 – 
matt b
6 Мар 2014 в 22:29
Просто добавил его. Изменить: использование List дает несоответствие типа, то же самое с ContactInto [].
 – 
Bill L
6 Мар 2014 в 22:35
Чтобы уточнить, ваш массив JSON, возвращенный запросом к URL-адресу, содержит набор объектов JSON, которые сопоставляются с pojos ContactInfo?
 – 
Sotirios Delimanolis
6 Мар 2014 в 22:39
Правильно, это безымянный массив объектов JSON, который я пытаюсь сопоставить с объектами ContactInfo. У меня есть все поля, определенные в ContactInfo, кроме одного, с которым я все еще пытаюсь иметь дело, но кроме этого это безымянный массив, содержащий объекты JSON.
 – 
Bill L
6 Мар 2014 в 22:43

1 ответ

Лучший ответ

Просто используйте ContactInfo[] в качестве типа класса. Вот рабочий пример.

public class Example {
    public static void main(String[] args) throws Exception {
        String json = "[{\"name\":\"random\"},{\"name\":\"random\"},{\"name\":\"random\"}]";
        ObjectMapper mapper = new ObjectMapper();
        ContactInfo[] contactInfos = mapper.readValue(json, ContactInfo[].class);
        System.out.println(contactInfos.length);
    }

    static class ContactInfo {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    } 
}

В качестве альтернативы вы можете использовать List<ContactInfo>, но вам понадобится TypeReference.

List<ContactInfo> contactInfos = mapper.readValue(json, new TypeReference<List<ContactInfo>>() {});
System.out.println(contactInfos.size());
3
Sotirios Delimanolis 6 Мар 2014 в 22:46
Вот и все, Джексон все еще учится, только сегодня начался, а руководств очень не хватает. Спасибо за помощь!
 – 
Bill L
6 Мар 2014 в 22:55