Дублирование логических полей в JSON

#java #json #jackson

#java #json #джексон

Вопрос:

У меня есть логическое поле как

 private boolean isCustom;
 

наличие геттера и сеттеров в качестве

 public boolean isCustom() {
        return isCustom;
    }
public void setCustom(boolean isCustom) {
        this.isCustom = isCustom;
    }
 

И в этом случае мой JSON будет {"custom":false}

но я хочу, чтобы JSON был {"isCustom":false}

поэтому я добавил @JsonProperty :

 @JsonProperty
    private boolean isCustom;
 

Но теперь есть еще одна проблема, поскольку мой JSON {"isCustom":false,"custom":false}

Вопрос: Как я могу устранить ненужное / повторяющееся поле в этом случае?

Примечание: я использую jackson-all-1.9.11.jar

Комментарии:

1. Вместо этого вы должны иметь возможность просто поместить @JsonProperty(name="isCustom") над логическим объявлением. Кроме того, вам следует переименовать поле в custom . Это может быть причиной двойной переменной.

2. мне нужно, чтобы свойство было «isCustom»

Ответ №1:

Аннотация принимает параметр. И он должен быть помещен в поле, получатель и установщик, чтобы предотвратить дублирование

 @JsonProperty("isCustom")
 

Комментарии:

1. это работает.. но какое-нибудь простое решение (у меня много логических значений)? и почему Джексон сгенерировал два поля?

2. Он создает поля на основе имен получателей и имен полей. Если они отличаются, вы получаете дубликаты. Единственный способ обойти это — аннотация. Если вы не хотите делать это вручную, создайте свои классы отсюда. jsonschema2pojo.org

3. даже если я добавлю @JsonProperty(«isCustom») только на getter, это работает.

Ответ №2:

Вы можете задать пользовательское имя в свойстве json следующим образом

 @JsonProperty(name="isCustom")
private boolean isCustom;
 

Пожалуйста, обратитесь к документам для получения дополнительной информации

Ответ №3:

Вы можете попробовать это

 @JsonProperty("isCustom")
 

Ответ №4:

Попробуйте использовать @JsonProperty(value = "isCustom") аннотацию

Комментарии:

1. Пожалуйста, добавьте дополнительные пояснения к вашему ответу

Ответ №5:

Поместите эту аннотацию (@JsonProperty("isCustom")) поверх getter и setter, она отобразит только одно поле и удалит дубликаты (для примитивного Boolean).

Ответ №6:

Есть два способа сделать это:

  • Добавить @JsonProperty("isCustom") в свою собственность
  • переименуйте свойство в custom (это приведет к удалению isCustom из json)

Комментарии:

1. мне нужно, чтобы свойство было «isCustom»

2. Хорошо, в таком случае мы можем перейти к первому варианту.