Java JacksonでJSONを変換するサンプル

JavaのJacksonでJSONを変換するサンプルです。
(確認環境:JDK 8、Eclipse 4.8)

目次 Jacksonとは
  Jacksonの取得方法
JSONからJavaオブジェクトに変換
  JSON(配列)からJavaオブジェクトに変換
  JavaオブジェクトからJSONに変換

Jacksonとは

Jacksonとは、JSONを処理するライブラリです。
JSONからJavaオブジェクトまたはJavaオブジェクトからJSONに変換します。
ライセンスは、Apache License 2.0です。

以下は、Jackson Projectのリンクです。
https://github.com/FasterXML/jackson

Jacksonの取得方法

1.Mavenで取得する場合

pom.xmlの<dependencies>の間に以下のコードを追加します。

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
   <version>2.9.7</version>
</dependency>

Mavenで取得する手順は、以下を参照願います。
Eclipse Mavenでjarを取得(Java)

上記コードの追加で、jackson-databindの他にjackson-annotationsとjackson-coreも追加されます。

 

2.jarファイルで取得する場合

jarファイルもMavenRepositoryのサイトにあります。
https://mvnrepository.com/artifact/com.fasterxml.jackson.core

上記リンクから、「Jackson Databind」をクリックしVersionの「2.x.x」をクリックして、以下の図の「Files」の横にある「bundle」をクリックするとjarファイルがダウンロードされます。

jackson-databind-2.x.x.jarの他に
jackson-annotations-2.x.x.jarとjackson-core-2.x.x.jarもダウンロードします。

ダウンロード完了後、jarファイルをクラスパスに追加します。
Eclipse jarファイルをクラスパスに設定する方法

 

JSONからJavaオブジェクトに変換

JSONからJavaオブジェクトに変換するサンプルです。

1.JSONデータ

{
    "syain": [
        {
            "id": "1",
            "name": "suzuki",
            "sikaku": [
                "基本",
                "応用"
            ]
        },
        {
            "id": "2",
            "name": "tanaka",
            "sikaku": [
                "ネットワーク"
            ]
        }
    ]
}

syainはオブジェクトの配列を持っています。sikakuは、文字列の配列です。

2.JSONデータを受けるJavaのクラス (Syain.java)

package test1;
import java.util.List;

class Syain {
	private List<SyainData> syain;

	public List<SyainData> getSyain() {
		return syain;
	}
}

 

3.JSONデータを受けるJavaのクラス (Syain.java)

package test1;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

class SyainData {
	@JsonProperty("id")
	private int id;
	@JsonProperty("name")
	private String name;
	@JsonProperty("sikaku")
	private List<String> sikaku;
	
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public List<String> getSikaku() {
		return sikaku;
	}
}

@JsonPropertyは、JSONのキーと紐付きます。

4.JSONをJavaオブジェクトに変換するクラス (Test1.java)

package test1;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test1 {
	public static void main(String[] args) {
		String testJson1 =
	"{\"syain\": " + 
	"[{\"id\": \"1\",\"name\": \"suzuki\",\"sikaku\": [\"基本\",\"応用\"]},"+
	"{\"id\": \"2\",\"name\": \"tanaka\",\"sikaku\": [\"ネットワーク\"]}]}";

		ObjectMapper mapper = new ObjectMapper();
		try {
			Syain s1 = mapper.readValue(testJson1, Syain.class);

			System.out.println(s1.getSyain().get(0).getId()); // 1
			System.out.println(s1.getSyain().get(0).getName()); // suzuki
			System.out.println(s1.getSyain().get(0).getSikaku());//[基本, 応用]
			
			System.out.println(s1.getSyain().get(1).getId()); // 2
			System.out.println(s1.getSyain().get(1).getName()); // tanaka
			System.out.println(s1.getSyain().get(1).getSikaku());//[ネットワーク]
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

9行目のJSONはリテラルなのでダブルコーテーションの前にエスケープシーケンスの\が入っています。
16行目は、JSONからJavaオブジェクトに変換しています。

 

JSON(配列)からJavaオブジェクトに変換

配列のJSONからJavaオブジェクトに変換するサンプルです。

1.配列のJSONデータ

配列のjsonデータです。最初と最後に[ ]があります。

[
   {
    "id": "1",
    "name": "suzuki",
    "sikaku": ["基本","応用"]
   },
   {
    "id": "2",
    "name": "tanaka",
    "sikaku": ["基本"]
   }
]

2.配列のJSONデータを受けるJavaのクラス (Syain.java)

package test1;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

class Syain {
	@JsonProperty("id")
	private int id;
	@JsonProperty("name")
	private String name;
	@JsonProperty("sikaku")
	private List<String> sikaku;
	
	public int getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public List<String> getSikaku() {
		return sikaku;
	}
}

3.配列のJSONをJavaオブジェクトに変換するクラス (Test1.java)

package test1;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test1 {
	public static void main(String[] args) {
		// JSONのデータ
		String testJson1 =
	"[{\"id\": \"1\",\"name\":\"suzuki\",\"sikaku\":[\"基本\",\"応用\"]},"
	+ "{\"id\": \"2\",\"name\": \"tanaka\",\"sikaku\": [\"基本\"]}]";

		ObjectMapper mapper = new ObjectMapper();
		try {
			// JSONからJavaオブジェクトに変換
			Syain[] syain1 = mapper.readValue(testJson1, Syain[].class);

			// Javaオブジェクトのデータの確認
			for (Syain a : syain1) {
				System.out.println(a.getId());
				System.out.println(a.getN());
				System.out.println(a.getSikaku());
			}
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

11,12行目のJSONはリテラルなのでダブルコーテーションの前にエスケープシーケンスの\が入っています。
17行目は、JSONからJavaオブジェクトに変換しています。Syain[]と配列にしています。

 

JavaオブジェクトからJSONに変換

JavaオブジェクトからJSONに変換するサンプルです。

1.Javaのクラス (Syain.java)

package test1;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

class Syain {
	@JsonProperty("syain")
	private List<SyainData> syain;

	public void setSyain(List<SyainData> syain) {
		this.syain = syain;
	}
}

データを作成するためsetterがあります。

2.Javaのクラス (SyainData.java)

package test1;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

class SyainData {
	@JsonProperty("id")
	private int id;
	@JsonProperty("name")
	private String name;
	@JsonProperty("sikaku")
	private List<String> sikaku;
	
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setSikaku(List<String> sikaku) {
		this.sikaku = sikaku;
	}
}

3.JavaオブジェクトからJSONに変換するクラス (Test1.java)

package test1;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

public class Test1 {
	public static void main(String[] args) {
		//Javaオブジェクトに値をセット
		SyainData sd1 = new SyainData();
		sd1.setId(1);
		sd1.setName("suzuki");
		List<String> sikaku = new ArrayList<>();
		sikaku.add("基本");
		sikaku.add("応用");
		sd1.setSikaku(sikaku);
		
		SyainData sd2 = new SyainData();
		sd2.setId(2);
		sd2.setName("tanaka");
		List<String> sikaku2 = new ArrayList<>();
		sikaku2.add("ネットワーク");
		sd2.setSikaku(sikaku2);

		List<SyainData> list = new ArrayList<>();
		list.add(sd1);
		list.add(sd2);
		
		Syain s1 = new Syain();
		s1.setSyain(list);
		
		ObjectMapper mapper = new ObjectMapper();
		try {
			//JavaオブジェクトからJSONに変換
			String testJson1 = mapper.writeValueAsString(s1);
			//JSONの確認
			System.out.println(testJson1); 
			//
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
	}
}

14~34行目は、Javaオブジェクトを生成し値をセットしています。
39行目は、JavaオブジェクトからJSONに変換しています。

関連の記事

JavaScript parse JSONをオブジェクトにする
JavaScript stringify オブジェクトをJSONにする

△上に戻る