Rumah  >  Artikel  >  Objek JsonNullable sentiasa mempunyai nilai isPresent = benar

Objek JsonNullable sentiasa mempunyai nilai isPresent = benar

PHPz
PHPzke hadapan
2024-02-08 22:42:27579semak imbas

JsonNullable ialah objek yang biasa digunakan dalam PHP Ia sentiasa mempunyai ciri bahawa nilai isPresent adalah benar. Ini bermakna objek JsonNullable dianggap hadir tanpa mengira sama ada ia batal atau tidak. Editor PHP Xinyi akan meneroka kegunaan dan ciri objek JsonNullable dalam artikel berikut, dan menerangkan sebab nilai isPresentnya sentiasa benar. Dengan pemahaman yang mendalam tentang objek JsonNullable, kita boleh lebih memahami aplikasi dan kelebihannya dalam pembangunan PHP.

Kandungan soalan

Saya mempunyai fail dalam format json. Ia menyimpan objek json yang saya gunakan dalam ujian saya. Saya menggunakan objectmapper untuk menukar fail ini kepada objek dan ia ditukar dengan baik, tetapi terdapat masalah. Semua medan dalam objek mempunyai jenis pembungkus jsonnullabel. Masalahnya adalah seperti berikut - semua objek jsonnullabel, walaupun ia mengandungi nilai atribut null ispresent = true. Oleh itu, kaedah "orelse" dan "ispresent" tidak berfungsi dengan betul. saya dapat npe. Bagaimanakah saya boleh memastikan bahawa apabila menukar daripada rentetan atau fail json, medan ini sama dengan "palsu" jika terdapat nilai nol di dalamnya?

contoh json:

65bee5661098c

Saya telah mencuba konfigurasi ini untuk objectmapper: Konfigurasi pemeta objek:

ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    objectMapper.registerModule(new Jdk8Module());
    objectMapper.registerModule(new JsonNullableModule());
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);

Penyelesaian

Cuba gunakan @jsondeserialize jackson anotasi pada ahli kelas yang boleh dibatalkan dalam json dan anda mahu nilainya menjadi "palsu" dan bukannya nol seperti ini:

public class MyJsonClass {
    @JsonDeserialize(using = CustomDeserializer.class)
    public String nullableMember;
}

public class CustomDeserializer
  extends StdDeserializer<String> {

    public CustomDeserializer() { 
        this(null); 
    } 

    public CustomDeserializer(Class<?> vc) { 
        super(vc); 
    }

    @Override
    public String deserialize(JsonParser jsonparser, DeserializationContext context) {
        String text = jsonparser.getText();
        if (null == text) {
          text = "false";
        }
        return text;
    }
}

Atas ialah kandungan terperinci Objek JsonNullable sentiasa mempunyai nilai isPresent = benar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam