【Java】ObjectMapperでJSONデータを変数に取り込む

ObjectMapperを使えばどんな型のjsonデータであっても変数に取り込んだり、またオブジェクトからjsonを出力したりすることができます。

過去に紹介した JSONObjectを使う方法 より全然楽です。

連想配列のJSON

JSONデータ

JSONデータは以下を使用します。

{
    "member_id":"1,
    "name":"Taro",
    "age":30,
    "address":"Tokyo"
}

JSONデータのParse処理

package com.example;

import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class App
{
    public static void main(String[] args)
    {
        String json = "{\"member_id\":1,\"name\":\"Taro\",\"age\":30,\"address\":\"Tokyo\"}";

        try {
            Map<String, Object> map = new ObjectMapper().readValue(
                json,
                new TypeReference<Map<String, Object>>() {
            });
            for(Map.Entry<String, Object> entry : map.entrySet()){
                System.out.println("key:" + entry.getKey() + ",
                    value:" + entry.getValue());
            }
        } catch (Exception e) {
            System.out.println(e.getClass().getName() + "\n" + e.getMessage());
        }
    }
}

実行結果

key:member_id, value:1
key:name, value:Taro
key:age, value:30
key:address, value:Tokyo

List形式のJSON

JSONデータ

[
    {
        "member_id\":"1,
        "name":"Taro",
        "age":30,
        "address":"Tokyo"
    },
    {
        "member_id\":"2,
        "name":"Jiro",
        "age":26,
        "address":"Tokyo"
    }
]

JSONデータのParse処理

package com.example;

import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class App
{
    public static void main( String[] args )
    {
        String json = "[{\"member_id\":1,\"name\":\"Taro\",\"age\":30,\"address\":\"Tokyo\"},{\"member_id\":2,\"name\":\"jiro\",\"age\":26,\"address\":\"Tokyo\"}]";

        try {
            List<Map<String, Object>> list = new ObjectMapper().readValue(
                json,
                new TypeReference<List<Map<String, Object>>>() {
            });

            for (Map<String, Object> map : list) {
                for(Map.Entry<String, Object> entry : map.entrySet()){
                    System.out.println("key:" + entry.getKey() +
                        ", value:" + entry.getValue());
                }
                System.out.println("------------------------");
            }
        } catch (Exception e) {
            System.out.println(e.getClass().getName() + "\n" + e.getMessage());
        }
    }
}

実行結果

key:member_id, value:1
key:name, value:Taro
key:age, value:30
key:address, value:Tokyo
------------------------
key:member_id, value:2
key:name, value:Jiro
key:age, value:26
key:address, value:Tokyo
------------------------

例外

Jsonデータが壊れていたりして場合は、ObjectMapper().readValue()で例外が発生します。

  • com.fasterxml.jackson.core.JsonParseException
  • com.fasterxml.jackson.databind.exc.MismatchedInputException
  • com.fasterxml.jackson.databind.JsonMappingException

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)