Heim  >  Artikel  >  Java  >  So lösen Sie das Problem des Umbenennens und Ordnens von @JSONField-Objektfeldern in Java

So lösen Sie das Problem des Umbenennens und Ordnens von @JSONField-Objektfeldern in Java

王林
王林nach vorne
2023-04-18 15:28:031669Durchsuche

Java-Objekt in Json, @JSONField-Objektfeld-Umbenennung

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.66</version>
        </dependency>

2. Feld-Umbenennung

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";
    }
}

2. Konvertieren Sie die Entität in einen JSON-String die Wirkung vor der Konvertierung

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

{

„businessLicenseCopy“: „1“,
„businessLicenseNumber“: „2“,

„businessTime“: „6“,
„companyAddress“: „5“,
„legalPerson“: „4“,
„merchantName“: „3“
}


3 Wir müssen in einen unterstrichenen Schlüssel konvertieren, z. B. „businessLicenseCopy“ in „business_license_copy“ umwandeln. Wir müssen die Entität ändern und die Anmerkung @JSONField hinzufügen

4. Fügen Sie Anmerkungen hinzu und drucken Sie den konvertierten JSON aus. ,
„legal_person“: „4“,

„merchant_name“: „3“

}

3. Der von uns ausgegebene und gedruckte JSON sieht so aus: 1“,

„business_license_number“: „2“,
„business_time“: „6“,

„company_address“: „5“,
„legal_person“: „4“,
„merchant_name“: „3“
}


Wir möchten die Schlüssel in einer bestimmten Reihenfolge neu anordnen

2. Fügen Sie die Sortierordnung zur @JSONField-Annotation hinzu
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";
    }
}

3. Geben Sie die konvertierten Entitäten aus und drucken Sie sie aus:

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

„business_license_copy“: „1“,
„business_license_number“: „2“,
„merchant_name“: „3“,
„legal_person“: „4“,
„company_address“: „5“,
„business_time“:“6“
}

Zusammenfassung:

Zusätzlich zu @JSONField gibt es auch @JsonProperty und @SerializedName; @JsonProperty wird hauptsächlich für die Konvertierung von Eingabeparametern und die Serialisierung von Json-Strings verwendet Java-Objekte; @SerializedName ändert die Feldwerte der Standardserialisierung und der Standarddeserialisierung.

Häufige Verwendungsszenarien der @JSONField-Annotation.

Ende möchte Der erforderliche Feldname unterscheidet sich derzeit von dem von uns bereitgestellten Feldnamen. Wenn die Entitätsklasse jedoch häufiger verwendet wird, sind die Kosten für die Änderung zu hoch , Sie können die Annotation @JSONField verwenden, um den Ersatz zu erreichen:

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

1. JSON-Inhalt und Entitätsklasse, reguläre Schreibmethode von @JSONField

JSON (konsistent mit dem folgenden JSON-String-Inhalt)
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";
    }
}

Entity-Klasse (AppleDO.java)
@JSONField(name = "size_new")
private int size;

2. JSON-Zeichen String-Konvertierung entspricht Java-Objekt

Ausführungscode
{
    size: 5,
    weight: 10,
    colour: "red"
}

Ausführungsergebnis

3. Unterstützt Serialisierung und Deserialisierung.

Die Standardwert der Serialisierung und die Deserialisierung im Quellcode wahr ist, dann ist dies standardmäßig der Fall. Dieses Feld darf wie folgt serialisiert und deserialisiert werden:

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;
    }
}

Verwendungsmethode (das Folgende unterstützt keine Serialisierung, aber Deserialisierung)

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());
}

Wenn einige unserer Felder haben Nullwerte, wir möchten dieses Feld trotzdem verwenden. Kehren Sie zum Frontend zurück (diese Konfiguration kann eine Zeichenfolge mit leeren Feldern zurückgeben, ist jedoch ungültig, wenn das Feld ein Basisdatentyp ist und in eine Wrapper-Klasse konvertiert werden muss)

boolean serialize() default true;
boolean deserialize() default true;

4. Geben Sie die Feldreihenfolge an

Konvertieren Sie Java-Objekte in das JSON-Format. Die konvertierte Feldreihenfolge wird nach dem ersten Buchstaben sortiert. Sie können die Feldreihenfolge auch auf folgende Weise angeben:

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

Führen Sie den Code aus

@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)

Das laufende Ergebnis vor dem Hinzufügen des Ordinalparameters

So lösen Sie das Problem des Umbenennens und Ordnens von @JSONField-Objektfeldern in JavaDas laufende Ergebnis nach dem Hinzufügen des Ordinalparameters

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem des Umbenennens und Ordnens von @JSONField-Objektfeldern in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen