Heim > Java > javaLernprogramm > 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

王林
Freigeben: 2023-04-18 15:28:03
nach vorne
1779 Leute haben es durchsucht

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

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.66</version>
        </dependency>
Nach dem Login kopieren

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";
    }
}
Nach dem Login kopieren

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

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
Nach dem Login kopieren
Nach dem Login kopieren

{

„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";
    }
}
Nach dem Login kopieren

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()));
Nach dem Login kopieren
Nach dem Login kopieren

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";
    }
}
Nach dem Login kopieren

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

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

Ausführungscode
{
    size: 5,
    weight: 10,
    colour: "red"
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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());
}
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

Führen Sie den Code aus

@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage