ホームページ >Java >&#&チュートリアル >Java で @JSONField オブジェクト フィールドの名前変更と順序付けの問題を解決する方法
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.66</version> </dependency>
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()));
##3. フィールドの並べ替え{
"business_license_copy":"1",
"business_license_number":"2",
" business_time":"6",
"company_address":"5",
"legal_person":"4",
"merchant_name":"3"
}
"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()));{@JSONField に加えて、名前変更には @JsonProperty と @SerializedName も含まれます。@JsonProperty は主に入力パラメータの変換と Java オブジェクトへの Json 文字列のシリアル化に使用されます。 ; @SerializedName は、デフォルトのシリアル化とデフォルトの逆シリアル化のフィールド値を変更します;"business_license_copy":"1",
##概要:
"business_license_number " :"2",
"販売者名":"3",
"法人名":"4",
"会社住所":"5",
"営業時間":"6"
}
@JSONField アノテーションの一般的な使用シナリオ
フロントエンドと対話するとき、フロントエンドが必要とするフィールドは、私たちが提供するフィールド名と異なります。現時点では、1 つの解決策はエンティティ クラスを変更することですが、エンティティ クラスがさらに使用される場合は、エンティティ クラスを変更します。コストが高すぎるため、アノテーション @JSONField を使用して置換効果を実現できます。使用方法は次のとおりです:
@JSONField(name = "size_new") private int size;1. JSON コンテンツとエンティティ クラス、@JSONField の従来の記述方法 JSON (以下の JSON 文字列の内容は一貫しています)
{ size: 5, weight: 10, colour: "red" }
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. シリアル化と逆シリアル化のサポート
ソース コード内のシリアル化と逆シリアル化のデフォルト値は次のとおりです。両方とも 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 オブジェクト フィールドの名前変更と順序付けの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。