>  기사  >  Java  >  Java에서 @JSONField 객체 필드의 이름을 바꾸고 순서를 지정하는 문제를 해결하는 방법

Java에서 @JSONField 객체 필드의 이름을 바꾸고 순서를 지정하는 문제를 해결하는 방법

王林
王林앞으로
2023-04-18 15:28:031668검색

Java 객체를 Json으로, @JSONField 객체 필드 이름 바꾸기 및 순서

1. Maven 종속성을 소개합니다

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

2. 필드 이름 바꾸기

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",
"businessTime":"6",
"companyAddress":"5",
" legalPerson": "4",
"merchantName":"3"
}

3 businessLicenseCopy를 business_license_copy로 변환하는 등 밑줄이 그어진 키로 변환해야 합니다

엔티티를 수정하고 @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",
"business_time":"6",
"company_address": "5" ,
"legal_person":"4",
"merchant_name":"3"
}

3. 필드 정렬

1. 출력하고 인쇄하는 json은 다음과 같습니다

{
"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의 일반 쓰기 방법

JSON(다음 JSON 문자열 콘텐츠와 일치)

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

실행 결과

Java에서 @JSONField 객체 필드의 이름을 바꾸고 순서를 지정하는 문제를 해결하는 방법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 객체 필드의 이름을 바꾸고 순서를 지정하는 문제를 해결하는 방법

위 내용은 Java에서 @JSONField 객체 필드의 이름을 바꾸고 순서를 지정하는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제