Websocketで複数のデータを送ろうとした際に、JavaEE7でJSON Processingが出てたのを思い出したので触ってみた。
ArunさんのブログにあるようにJSONとObject間のデータバインディングまではやってくれない。
(Note, binding JSON to Java objects and vice versa is not part of the scope of this JSR.)
想定用途(?)を探して見つけたブログによるとStaxでDom操作する感覚で使えるよとのこと。
->JCPにしっかり書いてあった。(2.1)
利用設定(Maven)
pomに依存関係を追加
<!-- JSON Processing (JSR-353) --> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.0.2 </version> </dependency>
試したソース
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.stream.JsonParser;
public class FirstJson01 {
public static void main(String[] args) {
System.out.println("生成");
JsonObject model = Json.createObjectBuilder()
.add("firstName", "Duke")
.add("lastName", "Java")
.add("age", 18)
.add("streetAddress", "100 Internet Dr")
.add("city", "JavaTown")
.add("state", "JA")
.add("postalCode", "12345")
.add("phoneNumbers", Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("type", "mobile")
.add("number", "111-111-1111"))
.add(Json.createObjectBuilder()
.add("type", "home")
.add("number", "222-222-2222")))
.build();
String text = model.toString();
System.out.println(text);
System.out.println("解析");
StringReader sr = new StringReader(text);
JsonParser parser = Json.createParser(sr);
while(parser.hasNext()){
JsonParser.Event event = parser.next();
System.out.println(event);
}
}
}
Eventの種類はSTART_OBJECT/END_OBJECT、START_ARRAY/END_ARRAY、KEY_NAME、VALUE_STRING、VALUE_NUMBER、VALUE_TRUE、VALUE_FALSE、VALUE_NULL。