Java:Jacksonで受信したJSONをパースする手順まとめ

Doctor.Y
Java:Jacksonで受信したJSONをパースするまでの手順を紹介します

はじめに

Java:Jacksonで受信したJSONをパースするまでの手順を紹介します

手順0:Servlet開発環境の構築

以下のリンクを参考にServletを開発できる環境を構築しておく

手順1:Jackson JSON ProcessorのJarファイルダウンロード

以下のリンクにアクセスし、

Downloads, 2.xのところから以下の3つのjarファイルをダウンロード
・Core(jackson-core-2.2.0.jar)
・Annotations(jackson-annotations-2.2.0.jar)
・Databind(jackson-databind-2.2.0.jar)

手順2:JAR置き場に配置

CentOSでyumでjdkをインストールした場合は以下のような場所にjarファイルを配置

/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre

手順3:EclipseでJava Build PathにJarファイルを追加

JAR置き場に配置してからプロジェクトを作成し、
JREシステムライブラリーにJackson JsonのJARが表示されていれば以下の操作は不要

・プロジェクト・エクスプローラーでプロジェクト名右クリック

・プロパティクリック

・Java Build Pathクリック

・ライブラリータブクリック

・JREシステムライブラリークリック

・外部JAR追加クリック

・追加したいJARファイル選択(複数選択可)

・OKクリック

・JREシステムライブラリーに追加したJARが表示されていればOK

実行時に以下のエラーメッセージが出た場合は、
JARファイルのJREシステムライブラリーへの追加に失敗していると
思われるのでもう一度確認する。

java.lang.NoClassDefFoundError

手順4:動的Webプロジェクトの作成

プロジェクト名:jsonRecieveProject

でプロジェクトを作成する

手順5:JSON受信用のサーブレットを作成

プロジェクトに以下の新規サーブレットを作成しておく

javaパッケージ:jp.co.jsonrecieve
JSON受信用サーブレットクラス:recieveClass

手順6:JacksonでJSONをパースするrecieveClassのコード記述

■コードの内容
doPostで受信したJSONをパースして出力

■doPostメソッド部分に以下のコードを記述

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ヘッダ部分の値を格納
String head = “ACCEPT: ” + request.getHeader(“ACCEPT”) + “\n” +
“REFERER: ” + request.getHeader(“REFERER”) + “\n” +
“ACCEPT-LANGUAGE: ” + request.getHeader(“ACCEPT-LANGUAGE”) + “\n” +
“USER-AGENT: ” + request.getHeader(“USER-AGENT”) + “\n” +
“HOST: ” + request.getHeader(“HOST”) + “\n” +
“CONTENT-TYPE: ” + request.getHeader(“CONTENT-TYPE”) + “\n” +
“CONTENT-LENGTH: ” + request.getHeader(“CONTENT-LENGTH”) + “\n” +
“CONNECTION: ” + request.getHeader(“CONNECTION”) + “\n” +
“CACHE-CONTROL: ” + request.getHeader(“CACHE-CONTROL”);

// ボディー部分のJSON文字列を格納
BufferedReader bufferReaderBody = new BufferedReader(request.getReader());
String body = bufferReaderBody.readLine();

// Jacksonのマッパーを生成して、生成したマッパーにJSONを渡してパース
ObjectMapper mapper = new ObjectMapper();
@SuppressWarnings(“unchecked”)
Map result = mapper.readValue(body, Map.class);

// 受信したヘッダ部分とボディー部分の値を出力
PrintWriter out = response.getWriter();
out.println(“#HEAD”);
out.println(head + “\n”);
out.println(“#BODY”);
out.println(body + “\n”);

// JacksonでパースしたJSONの値を出力
out.println(“#PARSE JSON”);
out.println(result.toString() + “\n”);
out.println(“#JSON VALUE”);
out.println(“a=” + result.get(“a”));
out.println(“b=” + result.get(“b”));
}

■必要なimportは以下のとおり
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;

手順7:実行(curlでJSONをPOST)

$ curl -H “Content-Type: application/json” -d ‘{“a”:1,”b”:2}’ http://localhost:8080/jsonRecieveProject/recieveClass

ヘッダのContent-Typeをapplication/json、
ボディーにJSON文字列として{“a”:1,”b”:2}
をセットする上記のコマンドを実行して以下のような出力がされればOK

#HEAD
ACCEPT: */*
REFERER: null
ACCEPT-LANGUAGE: null
USER-AGENT: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
HOST: localhost:8080
CONTENT-TYPE: application/json
CONTENT-LENGTH: 13
CONNECTION: null
CACHE-CONTROL: null

#BODY
{“a”:1,”b”:2}

#PARSE JSON
{a=1, b=2}

#JSON VALUE
a=1
b=2

参考リンク

https://matome.naver.jp/odai/2135549504682224901
2013年07月21日