Как прочитать корневые узлы, когда они имеют значение только с использованием Джексона?

Простая функция ...

elapsed_months <- function(end_date, start_date) {
    ed <- as.POSIXlt(end_date)
    sd <- as.POSIXlt(start_date)
    12 * (ed$year - sd$year) + (ed$mon - sd$mon)
}

Пример ...

>Sys.time()
[1] "2014-10-29 15:45:44 CDT"
>elapsed_months(Sys.time(), as.Date("2012-07-15"))
[1] 27
>elapsed_months("2002-06-30", c("2002-03-31", "2002-04-30", "2002-05-31"))
[1] 3 2 1

Для меня имеет смысл подумать об этой проблеме, просто вычитая две даты и поскольку minuend − subtrahend = difference (wikipedia) , я поставил более позднюю дату в списке параметров.

Обратите внимание, что он отлично работает для дат, предшествующих 1900 году, несмотря на те даты, которые имеют внутренние представления года как отрицательный, благодаря правилам вычитания отрицательных чисел ...

> elapsed_months("1791-01-10", "1776-07-01")
[1] 174

1
задан boardtc 17 January 2019 в 16:42
поделиться

2 ответа

Вы также можете десериализовать этот Json как Map с readValue(..), если readTree(..) не является обязательным требованием, например:

@Test
public void test() throws Exception {
    ObjectMapper jsonMapper = new ObjectMapper();
    // JSON contains this kind of a structure
    Map<String, List<Map<String, Object>>> map = jsonMapper
                // test.json should be in the same package as test and contain 
                // your Json
                .readValue(getClass().getResourceAsStream("test.json"), Map.class);
    // Result of this loggion below
    map.entrySet().forEach(entry -> {
        log.info("key: {}", entry.getKey());
        entry.getValue().forEach(person -> {
            log.info(" {} attending: {}", person.get("name"), person.get("attending"));
        });
    });
}

Журнал должен иметь вид:

[ 1111] ключ: первый
законопроект присутствующий: ложный
фред присутствующий: ложный
майк присутствующий: ложный
ключ: второй
Алан присутствовал: ложь

0
ответ дан pirho 17 January 2019 в 16:42
поделиться

Вы почти у цели! Найдите ниже быстрый фрагмент. Надеюсь, это поможет.

JsonNode node = mapper.readTree( "{\"First\":[{\"name\":\"Bill\",\"groupName\":\"team1\",\"groupType\":\"golf\",\"info\":[{\"name\":\"George\",\"groupName\":\"Caddy\"}],\"attending\":false},{\"name\":\"Fred\",\"groupName\":\"team2\",\"groupType\":\"golf\",\"info\":[{\"name\":\"Todd\",\"groupName\":\"caddy\"}],\"attending\":false},{\"name\":\"Mike\",\"groupName\":\"team3\",\"groupType\":\"golf\",\"info\":[{\"name\":\"Peter\",\"groupName\":\"caddy\"}],\"attending\":false}],\"Second\":[{\"name\":\"Alan\",\"groupName\":\"team4\",\"groupType\":\"golf\",\"info\":[{\"name\":\"Tony\",\"groupName\":\"caddy\"}],\"attending\":false}]}".getBytes() );
node.fields().forEachRemaining( entry -> System.out.println( "Key "+ entry.getKey() + " Value "+ entry.getValue()) );

Вывод:

Key First Value [{"name":"Bill","groupName":"team1","groupType":"golf","info":[{"name":"George","groupName":"Caddy"}],"attending":false},{"name":"Fred","groupName":"team2","groupType":"golf","info":[{"name":"Todd","groupName":"caddy"}],"attending":false},{"name":"Mike","groupName":"team3","groupType":"golf","info":[{"name":"Peter","groupName":"caddy"}],"attending":false}]
Key Second Value [{"name":"Alan","groupName":"team4","groupType":"golf","info":[{"name":"Tony","groupName":"caddy"}],"attending":false}]
0
ответ дан dev2d 17 January 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: