json文字列とbean変換

9899 ワード

Javawebを開発する時よくjsonのデータフォーマットを使って前のバックグラウンドでデータのインタラクションを行って、jsonに接触したばかりでブログを書いて自分のjsonのデータの変換に対する簡単な理解を記録して、くだらないことは言わないで、次から始めます.
Studioリストの定義は次のとおりです.
public class StudentList {
    private List student;

    public List getStudent() {
        return student;
    }

    public void setStudent(List student) {
        this.student = student;
    }

    public StudentList() {
        super();
    }

    public StudentList(List student) {
        super();
        this.student = student;
    }

}

次のコードはテストクラスです.
public class JsonTest {
        //json   
        String str = "{\"student\":[{\"name\":\"leilei\",\"age\":23},{\"name\":\"leilei02\",\"age\":23}]}";
        String str1 = "{\"student1\":[{\"name\":\"leilei\",\"age\":23},{\"name\":\"leilei02\",\"age\":23}]}";

        System.out.println(str1);
        Student stu = null;
        List list = null;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            // json         ,     str1      json ,           Class
            StudentList studentList = objectMapper.readValue(str1,StudentList.class);

            System.out.println(studentList);

            list = studentList.getStudent();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (Student s : list) {
            System.out.println(s.getName() + "   " + s.getAge());
        }
    }
}

StudentListクラスでstudentオブジェクトを定義していることがわかります.このオブジェクト名はjsonがjavabeanに変換するときに重要です.ObjectMapperのreadValue(str 1,StudentList)メソッドは、json文字列をjavabeanに変換する役割を果たし、反射メカニズムを適用します.まず、StudentListというクラスにjson列のstudent 1という変数が存在するかどうかを検索します.Unrecognized field「student 1」(Class test.StudentList)、not marked as ignorable
文字列jsonのこのstudent 1はStudentListというクラスで対応する属性と一致するものが見つからないという意味です.str 1は何ですか?「{」student 1」:[{]name」:\leilei」,age」:23},{\name」:\leilei 02」,age」:23}」というjson列のstudent 1は、StudentListのstudent属性に一致するため、名前が一致します.見つかったら、パラメータ付きコンストラクション関数を作成し、Studioのプロパティを割り当てます.
正しいのは、json列:「{」student」:[{」name」:」leilei」,」age」:23},{」name」:」leilei 02」,"age":23}}}」変換されたエンティティクラスです.
public class StudentList {
    //      json    
    private List student;

    public List getStudent() {
        return student;
    }

    public void setStudent(List student) {
        this.student = student;
    }

    public StudentList() {
        super();
    }
    //       
    public StudentList(List student) {
        super();
        this.student = student;
    }

}

印刷結果:
{"student1":[{"name":"leilei","age":23},{"name":"leilei02","age":23}]}
test.StudentList@3ca83695
leilei   23
leilei02   23

JAvabeanはどのようにjsonに変換しますか?
次はテストコードです.
public class BeanToJson {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        Student s1=new Student();
        s1.setName("leilei");
        s1.setAge(23);
        Student s2=new Student();
        s2.setName("leilei02");
        s2.setAge(23);
        list.add(s1);
        list.add(s2);

        StringWriter str=new StringWriter();

        ObjectMapper objectMapper=new ObjectMapper();
        try {
            // list             
            objectMapper.writeValue(str, list);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        System.out.println(str);
    }

}

やはりObjectMapperというクラスを使って、今回呼び出されたのはwriteValue(str,list)メソッドで、最初のパラメータは変換されたjson列受信オブジェクトで、2番目のパラメータは変換されたオブジェクトです.strのタイプはStringではなくStringWriter、StringWriterの内部かStringBufferかに注意してください.主に文字列の操作を容易にするためです.
public class StringWriter extends Writer {

    private StringBuffer buf;

    /**
     * Create a new string writer using the default initial string-buffer
     * size.
     */
    public StringWriter() {
        buf = new StringBuffer();
        lock = buf;
    }

実行結果:
[{"name":"leilei","age":23,"sex":"\u0000"},{"name":"leilei02","age":23,"sex":"\u0000"}]

後でStudioにフィールドを追加したので、文字列jsonには対応するキー値のペアがなく、印刷時にnullを表します.