Javaプログラミング:指定したフィールド順にBeanをJsonに変換


Jsonツールの紹介


Java言語では、一般的なBeanをJsonに変換するJarパッケージには、次のような種類があります.
  • fastjson-1.2.23.JAr【alibaba】【コミュニティが活発】アドレス:https://github.com/alibaba/fastjson
  • gson-2.8.0.JAr【google】【コミュニティが活発】アドレス:https://github.com/google/gson
  • jackson-core.JArアドレス:http://jackson.codehaus.org
  • json-lib-2.4アドレス:http://www.mvnrepository.com/artifact/net.sf.json-lib/json-lib/2.4

  • 私たちの問題は、上記のツールを使用する過程で、指定したフィールドの順序でどのようにシーケンス化しますか?次にfastjsonを例に説明します.

    解決策


    コード1:
    public class User2 {
        private String name;
        private String age;
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    }
    

    デフォルトで生成されるJson文字列は次のとおりです.
    {"age":"18","name":"json","sex":" "}
    

    コード2:
    import com.alibaba.fastjson.annotation.JSONField;
    
    public class User {
        @JSONField(ordinal=1)
        private String name;
        @JSONField(ordinal=2)
        private String age;
        @JSONField(ordinal=3)
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    }
    

    注記@JSONField(ordinal=1)フィールドのソート設定を使用して、Json文字列を次のように生成します.
    {"name":"json","age":"18","sex":" "}
    

    その他のツールの多くは似たような機能を備えており、以上は参考までにしてください.

    デザート


    コード3:
    import com.alibaba.fastjson.annotation.JSONField;
    
    public class User {
        @JSONField(ordinal = 1)
        private String name;
        @JSONField(ordinal = 2, name = "nianling")
        private String age;
        @JSONField(ordinal = 3)
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }   
    }
    

    Json文字列は次のように生成されます.
    {"name":"json","nianling":"18","sex":" "}
    

    コード2で生成された文字列を比較すると、ageがnianlingになったのはなぜですか.
    レビューコード:
       :
    @JSONField(ordinal = 2)
    private String age;
    
       :
    @JSONField(ordinal = 2, name = "nianling")
    private String age;
    

    元々はnameの役割でした.