Rumah > Java > javaTutorial > Bagaimana untuk menyelesaikan masalah menamakan semula dan memesan medan objek @JSONField di Jawa

Bagaimana untuk menyelesaikan masalah menamakan semula dan memesan medan objek @JSONField di Jawa

王林
Lepaskan: 2023-04-18 15:28:03
ke hadapan
1779 orang telah melayarinya

Tukar objek Java kepada Json, namakan semula dan perintah medan objek @JSONField

1. Perkenalkan kebergantungan maven

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.66</version>
        </dependency>
Salin selepas log masuk

2 ujian entiti

2. Tukar entiti kepada rentetan json dan lihat kesan sebelum penukaran
import lombok.Data; 
import java.io.Serializable;
 
/**
 * @类名 WeChatBusinessLicenseInfo
 * @描述 营业执照/登记证书信息(测试用)
 * @版本 1.0
 * @创建人 XuKang
 * @创建时间 2021/12/24 10:43
 **/
@Data
public class LkWeChatBusinessLicenseInfo implements Serializable {
    private static final long serialVersionUID = 1582941630439552458L;
    private String businessLicenseCopy;
    private String businessLicenseNumber;
    private String merchantName;
    private String legalPerson;
    private String companyAddress;
    private String businessTime;
    public LkWeChatBusinessLicenseInfo(){
        this.businessLicenseCopy = "1";
        this.businessLicenseNumber = "2";
        this.merchantName = "3";
        this.legalPerson = "4";
        this.companyAddress = "5";
        this.businessTime = "6";
    }
}
Salin selepas log masuk

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
Salin selepas log masuk
Salin selepas log masuk
{
"businessLicenseCopy":" 1",

"Nombor Lesen perniagaan":"2",
"Masa perniagaan":"6",
"Alamat syarikat":"5",
"Orang Sah":"4",
"Nama Pedagang" :"3"
}

3 Kami ingin menukar kepada kunci bergaris, contohnya, untuk menukar businessLicenseCopy kepada business_license_copy

Kami perlu mengubah suai entiti, menambah Anotasi @JSONField

4 Tambahkan anotasi dan cetak json yang ditukar
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
 
/**
 * @类名 WeChatBusinessLicenseInfo
 * @描述 营业执照/登记证书信息(测试用)
 * @版本 1.0
 * @创建人 XuKang
 * @创建时间 2021/12/24 10:43
 **/
@Data
public class LkWeChatBusinessLicenseInfo implements Serializable {
    private static final long serialVersionUID = 1582941630439552458L;
    @JSONField(name = "business_license_copy")
    private String businessLicenseCopy;
 
    @JSONField(name = "business_license_number")
    private String businessLicenseNumber;
 
    @JSONField(name = "merchant_name")
    private String merchantName;
 
    @JSONField(name = "legal_person")
    private String legalPerson;
 
    @JSONField(name = "company_address")
    private String companyAddress;
 
    @JSONField(name = "business_time")
    private String businessTime;
 
    public LkWeChatBusinessLicenseInfo(){
        this.businessLicenseCopy = "1";
        this.businessLicenseNumber = "2";
        this.merchantName = "3";
        this.legalPerson = "4";
        this.companyAddress = "5";
        this.businessTime = "6";
    }
}
Salin selepas log masuk

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
Salin selepas log masuk
Salin selepas log masuk
{
"business_license_copy":"1",

" business_license_number":"2",
"business_time":"6",
"company_address":"5",
"legal_person":"4",
"merchant_name":"3 "
}

3. Pengisihan medan

1. :"1",

"nombor_lesen_perniagaan":"2",

"masa_niaga":"6",

"alamat_syarikat":"5",
"orang_undang-undang":"4",

"merchant_name":"3"
}


Kami mahu menyusun semula kunci dalam susunan tertentu

2. Tambahkan ordinal pengisihan
pada anotasi @JSONField

3. Output dan cetak entiti yang ditukar:

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));

{<🎜_> "business_license ":"1",
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
 
/**
 * @类名 WeChatBusinessLicenseInfo
 * @描述 营业执照/登记证书信息(测试用)
 * @版本 1.0
 * @创建人 XuKang
 * @创建时间 2021/12/24 10:43
 **/
@Data
public class LkWeChatBusinessLicenseInfo implements Serializable {
 
    private static final long serialVersionUID = 1582941630439552458L;
 
    @JSONField(name = "business_license_copy",ordinal = 1)
    private String businessLicenseCopy;
 
    @JSONField(name = "business_license_number",ordinal = 2)
    private String businessLicenseNumber;
 
    @JSONField(name = "merchant_name",ordinal = 3)
    private String merchantName;
 
    @JSONField(name = "legal_person",ordinal = 4)
    private String legalPerson;
 
    @JSONField(name = "company_address",ordinal = 5)
    private String companyAddress;
 
    @JSONField(name = "business_time",ordinal = 6)
    private String businessTime;
 
    public LkWeChatBusinessLicenseInfo(){
        this.businessLicenseCopy = "1";
        this.businessLicenseNumber = "2";
        this.merchantName = "3";
        this.legalPerson = "4";
        this.companyAddress = "5";
        this.businessTime = "6";
    }
}
Salin selepas log masuk
"nombor_lesen_perniagaan":"2",

"nama_pedagang":"3",

"orang_undang-undang":"4",
"alamat_syarikat":"5",

"business_time":"6"
}



Ringkasan:
Selain @JSONField, nama semula juga termasuk @JsonProperty dan @JsonProperty terutamanya digunakan untuk penukaran parameter Input, dan pensirilan rentetan Json ke dalam objek Java; @SerializedName mengubah nilai medan penyirian lalai dan penyahsiran lalai

@JSONField senario penggunaan biasa

<; 🎜>Senario aplikasi:

Apabila kami berinteraksi dengan bahagian hadapan, medan yang dikehendaki adalah berbeza daripada nama medan yang kami sediakan Pada masa ini, satu penyelesaian ialah mengubah suai entiti kelas, tetapi jika Kelas entiti ini digunakan secara meluas, jadi kos menukarnya terlalu tinggi Oleh itu, anda boleh menggunakan anotasi @JSONField untuk mencapai kesan penggantian adalah seperti berikut:

1. Kandungan JSON dan kelas entiti, @JSONField Penulisan konvensional

JSON (selaras dengan kandungan rentetan JSON berikut)

Kelas entiti (AppleDO.java)

@JSONField(name = "size_new")
private int size;
Salin selepas log masuk

2. Penukaran rentetan JSON Objek Java yang sepadan

kod pelaksanaan

{
    size: 5,
    weight: 10,
    colour: "red"
}
Salin selepas log masuk

hasil larian

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
public class AppleDO {
    @JSONField(name = "size_new")
    private int size;
    @JSONField(name = "weight_new")
    private int weight;
    @JSONField(name = "colour_new")
    private String colour;
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public int getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }
    public String getColour() {
        return colour;
    }
    public void setColour(String colour) {
        this.colour = colour;
    }
}
Salin selepas log masuk

3. Menyokong siri dan penyahsirilan

public static void main(String[] args) {
    String json = "{\n" +
        "    size_new: 5,\n" +
        "    weight_new: 10,\n" +
        "    colour_new: \"red\",\n" +
        "}";
    AppleDO appleDO = JSON.parseObject(json, AppleDO.class);
    System.out.println(appleDO.getSize());
    System.out.println(appleDO.getWeight());
    System.out.println(appleDO.getColour());
}
Salin selepas log masuk
Nilai lalai penyirian dan penyahsirilan dalam kod sumber adalah benar, jadi pensirilan dan penyahsirilan medan ini dibenarkan secara lalai, seperti berikut:

Penggunaan kaedah (yang berikut tidak disokong Pensirian, penyahserikatan disokong) Bagaimana untuk menyelesaikan masalah menamakan semula dan memesan medan objek @JSONField di Jawa

Apabila sesetengah medan kami mempunyai nilai nol, kami masih mahu mengembalikan medan ini ke hujung hadapan (konfigurasi ini boleh mengembalikan rentetan dengan nol medan, Walau bagaimanapun, ia tidak sah apabila medan itu adalah jenis data asas dan mesti ditukar kepada kelas pembalut)

4. Tentukan susunan medan
boolean serialize() default true;
boolean deserialize() default true;
Salin selepas log masuk

Tukar objek Java kepada Format JSON, dan medan yang ditukar Pesanan akan diisih mengikut huruf pertama Anda juga boleh menentukan susunan medan dengan cara berikut:

@JSONField(name = "size_new", serialize = false, deserialize = true)
private int size;
Salin selepas log masuk

Laksanakan kod

@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)
Salin selepas log masuk
<🎜. >Tambah parameter ordinal sebelum menjalankan keputusan

@JSONField(name = "size_new", ordinal = 3)
private int size;
@JSONField(name = "weight_new", ordinal = 1)
private int weight;
@JSONField(name = "colour_new", ordinal = 2)
private String colour;
Salin selepas log masuk

Hasil larian selepas menambah parameter ordinal

AppleDO apple = new AppleDO();
apple.setSize(6);
apple.setWeight(12);
apple.setColour("green");
String appleStr = JSON.toJSONString(apple);
System.out.println(appleStr);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah menamakan semula dan memesan medan objek @JSONField di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan