Jackson-data-binding

提供:Dev Guides
移動先:案内検索

ジャクソン-データバインディング

データバインディングAPIは、プロパティアクセサーまたはアノテーションを使用してJSONをPOJO(Plain Old Java Object)との間で変換するために使用されます。 それは2つのタイプです。

  • シンプルなデータバインディング-JSONからJavaマップ、リスト、文字列、数値、ブール値、nullオブジェクトへの変換を行います。
  • 完全なデータバインディング-JSONを任意のJAVAタイプとの間で変換します。

ObjectMapperは、両方のタイプのデータバインディングのJSONを読み書きします。 データバインディングは最も便利な方法であり、XMLのJAXBパーラーに類似しています。

シンプルなデータバインディング

シンプルなデータバインディングとは、JSONからJAVA Coreデータ型へのマッピングを指します。 次の表は、JSONタイプとJavaタイプの関係を示しています。

Sr. No. JSON Type Java Type
1 object LinkedHashMap<String,Object>
2 array ArrayList<Object>
3 string String
4 complete number Integer, Long or BigInteger
5 fractional number Double/BigDecimal
6 true false
Boolean 7 null

実際のシンプルなデータバインディングを見てみましょう。 ここでは、JAVAの基本型をJSONに直接マッピングし、その逆も行います。

*C:\> Jackson_WORKSPACE* にJacksonTesterという名前のJavaクラスファイルを作成します。

ファイル:JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonTester {
   public static void main(String args[]){
      JacksonTester tester = new JacksonTester();
         try {
            ObjectMapper mapper = new ObjectMapper();

            Map<String,Object> studentDataMap = new HashMap<String,Object>();
            int[] marks = {1,2,3};

            Student student = new Student();
            student.setAge(10);
            student.setName("Mahesh");
           //JAVA Object
            studentDataMap.put("student", student);
           //JAVA String
            studentDataMap.put("name", "Mahesh Kumar");
           //JAVA Boolean
            studentDataMap.put("verified", Boolean.FALSE);
           //Array
            studentDataMap.put("marks", marks);

            mapper.writeValue(new File("student.json"), studentDataMap);
           //result student.json
           //{
           //  "student":{"name":"Mahesh","age":10},
           //  "marks":[1,2,3],
           //  "verified":false,
           //  "name":"Mahesh Kumar"
           //}
            studentDataMap = mapper.readValue(new File("student.json"), Map.class);

            System.out.println(studentDataMap.get("student"));
            System.out.println(studentDataMap.get("name"));
            System.out.println(studentDataMap.get("verified"));
            System.out.println(studentDataMap.get("marks"));
      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
            e.printStackTrace();
      }
   }
}

class Student {
   private String name;
   private int age;
   public Student(){}
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String toString(){
      return "Student [ name: "+name+", age: "+ age+ " ]";
   }
}

結果を確認する

次のように javac コンパイラを使用してクラスをコンパイルします。

C:\Jackson_WORKSPACE>javac JacksonTester.java

次に、jacksonTesterを実行して結果を確認します。

C:\Jackson_WORKSPACE>java JacksonTester

出力を確認する

{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]

リンク:/jackson/jackson_full_data_binding [完全なデータバインディング]

リンク:/jackson/jackson_data_binding_generics [ジェネリックとのデータバインディング]