Свойство десериализации JSON, включая $

Имея JSON с таким свойством, которое я пытаюсь десериализовать с помощью Джексона:

 { "$fooid" : "yfdfjjhkjhkljhd768622323jjj" }

Проблема в том, что я не могу прочитать ключ «$ fooid».

Я попытался аннотировать свойство с помощью

@JsonAlias("$fooid")
private String fooid;

также как

@JsonProperty("$fooid")
private String fooid;

Оба варианта работать не будут, свойство fooid всегда равно нулю.

Как десериализовать его на Java? Какие-нибудь намеки?

Вы пытались поместить аннотацию в геттер / сеттер (посмотрите документацию) и убедитесь, что пакеты совпадают? (Иногда у нас возникают проблемы с аннотациями Jackson 1.x по сравнению с Jackson 2.x во время выполнения.)

Thomas 17.09.2018 11:39

оба работают и у меня с Джексоном 2.9.6

kukkuz 17.09.2018 11:44

как ты читаешь этот json? потому что когда я пытаюсь десериализовать String json = "{ \"$fooid\" : \"yfdfjjhkjhkljhd768622323jjj\" }" ; у меня он работает с версией 2.0.0, у вас есть также геттер и сеттер для fooid?

vmrvictor 17.09.2018 11:52

Хм, я тоже использую jackson 2.9.6, но у меня это не сработает. @kukkuz Можете ли вы предложить свое решение? Я использую GSON в качестве генератора. Может в этом проблема?

piet 17.09.2018 11:52
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; class Hello { @JsonAlias("$fooid") private String fooid; public String getFooid() { return fooid; } public void setFooid(String fooid) { this.fooid = fooid; } public static void main(String[] args) throws IOException { Hello hello = new ObjectMapper().readValue("{ \"$fooid\" : \"yfdfjjhkjhkljhd768622323jjj\" }", Hello.class); System.out.println(hello.getFooid()); } }
kukkuz 17.09.2018 11:54

@kukuzz, большое спасибо. Я попробовал, как вы и сказали, и он работает.

piet 17.09.2018 12:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, как вы это делаете, но у меня это работает в версии 2.0.0.

public class JSonAliasWithSpecialCharacters {

    public static void main(String[] args) throws IOException {
        String json = "{ \"$fooid\" : \"yfdfjjhkjhkljhd768622323jjj\" }";
        ObjectMapper mapper = new ObjectMapper();
        JsonFooid fooid = mapper.readValue(json, JsonFooid.class);
        System.out.println("read the foodid:"+fooid.getFooid());
    }

}

public class JsonFooid {

    @JsonProperty("$fooid")
    private String fooid;

    public String getFooid() {
        return fooid;
    }

    public void setFooid(String fooid) {
        this.fooid = fooid;
    }

}

Японец, с помощью этого решения я получаю десериализацию JSON. Думаю, проблема в моей сети - это GSON. Спасибо @vmrvictor.

piet 17.09.2018 11:58

Другие вопросы по теме