8

私は、グーグルGSONの代わりに、JSONジェネレーターとしてジャクソンを使い始めました。Jacksonがオブジェクトを生成しているという問題が発生しました。オブジェクトが実際にnullの場合はnullです。一方、GSONはJSONにNOエントリを生成します。これは、私が望む動作です。オブジェクトが欠落しているときにJacksonがnullオブジェクト/値を生成するのを防ぐ方法はありますか?

ジャクソン

        ObjectMapper mapper = new ObjectMapper();
    StringWriter sw = new StringWriter();
    mapper.writeValue(sw, some_complex_object);
    String jackson = sw.getBuffer().toString();

    System.out.println("********************* START JACKSON JSON ****************************");
    System.out.println(jackson);
    System.out.println("********************* END JACKSON JSON ****************************");

これを生成します:

{"eatwithrustyspoon":{ "urlList":null、 "device": "iPad"、 "os": "iPhone OS"、 "peer_id":

GSONは次のようになります。

        Gson gson = new Gson();
    String json = gson.toJson(some_complex_object);

    System.out.println("********************* START GSON JSON ****************************");
    System.out.println(json);
    System.out.println("********************* END GSON JSON ****************************");

そしてこれを生成します(これは私が欲しいものです- "urlList":nullが生成されなかったことに注意してください):

{"eatwithrustyspoon":{"device": "iPad"、 "os": "iPhone OS"、 "peer_id"

4

3 に答える 3

12

ジャクソンFAQから:

null値のBeanプロパティの書き込みを省略できますか?(「nullプロパティの書き込みを防ぐ方法」、「null値を抑制する方法」)

はい。JacksonAnnotationSerializeNullsに従って、次を使用できます。

  objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
  // or (for older versions):
  objectMapper.configure(SerializationConfig.WRITE_NULL_PROPERTIES, false);

そして出来上がり、これ以上null値はありません。この設定はシリアライザーと一緒にキャッシュされる可能性があるため、Beanをシリアル化する前にマッパーを構成する必要があることに注意してください。したがって、設定が遅すぎると、変更が有効にならない可能性があります。

于 2013-02-13T16:42:15.973 に答える
2

私の問題は少し異なっていましたが、実際にはPOJOクラスのプロパティにNull値を取得していました。

ただし、次のようにpojoクラスのプロパティにマッピングを与えることで問題を解決しました。

@JsonProperty( "PROPERTY_NAME")

それは誰かを助けるかもしれないと思った:)

于 2016-10-05T12:33:16.303 に答える
1

次の解決策は私を救った。

  objectMapper.setSerializationInclusion(Include.NON_NULL);
于 2016-07-28T09:01:18.637 に答える