ホームページ > Java > &#&チュートリアル > Java で @JSONField オブジェクト フィールドの名前変更と順序付けの問題を解決する方法

Java で @JSONField オブジェクト フィールドの名前変更と順序付けの問題を解決する方法

王林
リリース: 2023-04-18 15:28:03
転載
1783 人が閲覧しました

Java オブジェクトを Json に変換し、@JSONField オブジェクト フィールドの名前変更と順序を変更します

1. Maven 依存関係を導入します

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.66</version>
        </dependency>
ログイン後にコピー

2. フィールドの名前変更

1. テスト エンティティを作成します

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. エンティティを JSON 文字列に変換し、変換前に効果を確認します

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
ログイン後にコピー
ログイン後にコピー

{
"businessLicenseCopy":"1",
"businessLicenseNumber" :"2",
"businessTime":"6",
"companyAddress":"5",
"legalperson":"4",
"merchantName":"3 "
}

3. 下線付きのキーに変換する必要があります。たとえば、businessLicenseCopy を business_license_copy に変換するなどです。

エンティティを変更し、注釈 @JSONField

を追加する必要があります。
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";
    }
}
ログイン後にコピー

4. 注釈を追加し、変換された json

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
ログイン後にコピー
ログイン後にコピー

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

##3. フィールドの並べ替え

##1. 出力して印刷する JSON は次のようになります。

{
"business_license_copy":"1",

"business_license_number " :"2",
"営業時間":"6",
"会社住所":"5",
"法人名":"4",
"販売者名":"3"
}

キーを特定の順序で並べ替えたい

2. @JSONField アノテーションに並べ替え順序を追加します

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";
    }
}
ログイン後にコピー

3. 出力して印刷します変換エンティティ:

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

"business_license_copy":"1",
"business_license_number " :"2",
"販売者名":"3",
"法人名":"4",
"会社住所":"5",
"営業時間":"6"
}

##概要:
@JSONField に加えて、名前変更には @JsonProperty と @SerializedName も含まれます。@JsonProperty は主に入力パラメータの変換と Java オブジェクトへの Json 文字列のシリアル化に使用されます。 ; @SerializedName は、デフォルトのシリアル化とデフォルトの逆シリアル化のフィールド値を変更します;

@JSONField アノテーションの一般的な使用シナリオ

アプリケーション シナリオ:

フロントエンドと対話するとき、フロントエンドが必要とするフィールドは、私たちが提供するフィールド名と異なります。現時点では、1 つの解決策はエンティティ クラスを変更することですが、エンティティ クラスがさらに使用される場合は、エンティティ クラスを変更します。コストが高すぎるため、アノテーション @JSONField を使用して置換効果を実現できます。使用方法は次のとおりです:

@JSONField(name = "size_new")
private int size;
ログイン後にコピー

1. JSON コンテンツとエンティティ クラス、@JSONField の従来の記述方法

JSON (以下の JSON 文字列の内容は一貫しています)

{
    size: 5,
    weight: 10,
    colour: "red"
}
ログイン後にコピー

Entity クラス (AppleDO.java)

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;
    }
}
ログイン後にコピー

2. JSON 文字列を対応する Java オブジェクトに変換します

実行コード

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());
}
ログイン後にコピー

実行結果

3. シリアル化と逆シリアル化のサポートJava で @JSONField オブジェクト フィールドの名前変更と順序付けの問題を解決する方法

ソース コード内のシリアル化と逆シリアル化のデフォルト値は次のとおりです。両方とも true、その場合はデフォルト 次のように、このフィールドのシリアル化と逆シリアル化が可能になります。

boolean serialize() default true;
boolean deserialize() default true;
ログイン後にコピー

使用方法 (以下はシリアル化をサポートしませんが、逆シリアル化はサポートします)

@JSONField(name = "size_new", serialize = false, deserialize = true)
private int size;
ログイン後にコピー

When some of私たちのフィールドは次のとおりです。値が空の場合でも、このフィールドをフロントエンドに返します (この設定では空のフィールドを含む文字列を返すことができますが、フィールドが基本データ型であり、データ型に変換する必要がある場合は無効です)。ラッパークラス)

@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)
ログイン後にコピー

4. フィールドの順序を指定します

Java オブジェクトを JSON 形式に変換します。変換されたフィールドの順序は最初の文字に従ってソートされます。フィールドの順序を指定することもできます

@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;
ログイン後にコピー

コードの実行

AppleDO apple = new AppleDO();
apple.setSize(6);
apple.setWeight(12);
apple.setColour("green");
String appleStr = JSON.toJSONString(apple);
System.out.println(appleStr);
ログイン後にコピー
順序パラメータを追加する前の実行結果


実行結果序数パラメータを追加した後 Java で @JSONField オブジェクト フィールドの名前変更と順序付けの問題を解決する方法

#

以上がJava で @JSONField オブジェクト フィールドの名前変更と順序付けの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート