<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.66</version> </dependency>
1. 엔터티를 json 문자열로 변환합니다. 변환 전 효과
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"; } }
"businessLicenseCopy":"1","businessLicenseNumber":"2",
3 businessLicenseCopy를 business_license_copy로 변환하는 등 밑줄이 그어진 키로 변환해야 합니다
"businessTime":"6",
"companyAddress":"5",
" legalPerson": "4",
"merchantName":"3"
}
엔티티를 수정하고 @JSONField
System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
4. 주석을 추가하고 변환된 json을 인쇄합니다
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"; } }
"business_license_copy":"1","business_license_number":"2",
3. 필드 정렬
"business_time":"6",
"company_address": "5" ,
"legal_person":"4",
"merchant_name":"3"
}
"business_license_copy":" 1","business_license_number":"2",
특정 순서로 키를 재정렬하려고 합니다
"business_time":"6",
"company_address":"5",
"legal_person":"4",
"merchant_name":"3"
}
2. @JSONField 주석에 정렬 서수를 추가합니다
System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
3. 변환된 엔터티를 출력하고 인쇄합니다.
System.out.println(JSONObject.toJSONString( new LkWeChatBusinessLicenseInfo()));{요약:"business_license_copy":"1",
"business_license_number":"2",
"merchant_name":"3",
"legal_person":"4",
"회사_주소": "5",
"business_time":"6"
}
@JSONField 외에도 @JsonProperty 및 @SerializedName도 있으며 @JsonProperty는 주로 입력 매개 변수 변환 및 Json 문자열 직렬화에 사용됩니다. Java 객체, @SerializedName은 기본 직렬화 및 기본 역직렬화의 필드 값을 변경합니다. @JSONField 주석의 일반적인 사용 시나리오
애플리케이션 시나리오:end want to 필수 필드 이름이 우리가 제공하는 필드 이름과 다릅니다. 이때 한 가지 해결 방법은 엔터티 클래스를 수정하는 것입니다. 그러나 엔터티 클래스를 더 자주 사용하면 변경 비용이 너무 높아집니다. , @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"; } }
1. JSON 콘텐츠 및 엔터티 클래스, @JSONField의 일반 쓰기 방법
@JSONField(name = "size_new") private int size;
엔티티 클래스(AppleDO.java)
{ size: 5, weight: 10, colour: "red" }
2. JSON 문자 문자열 변환은 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; } }
실행 결과
3 지원합니다. 기본값 소스 코드의 직렬화 및 역직렬화는 모두 true이고 기본적으로는 다음과 같습니다. 이 필드는 다음과 같이 직렬화 및 역직렬화를 허용합니다:
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()); }
boolean serialize() default true; boolean deserialize() default true;
When 일부 필드에 null 값이 있지만 이 필드를 계속 사용하고 싶습니다. 프런트 엔드로 돌아가기(이 구성은 빈 필드가 있는 문자열을 반환할 수 있지만 필드가 기본 데이터 유형이고 래퍼로 변환되어야 하는 경우 유효하지 않습니다.) class)
@JSONField(name = "size_new", serialize = false, deserialize = true) private int size;
4. 필드 순서 지정
Java 객체를 JSON 형식으로 변환하면 변환된 필드 순서가 첫 글자에 따라 정렬됩니다. 다음과 같은 방법으로 필드 순서를 지정할 수도 있습니다. code
@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)
순수 매개변수 추가 후 실행 결과
위 내용은 Java에서 @JSONField 객체 필드의 이름을 바꾸고 순서를 지정하는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!