Java8からS3に配置したJSONファイルを読み取る

awsJava8

Java8からS3に配置したJSONファイルを読み取る

Java8からS3に配置したJSONファイルを読み込んでみます。読み込むファイルはa.jsonとします。

a.json

{
  "key1": {
    "key2": "test2",
    "key3": "test3"
  }
}

bucket名はconfrageとしておきます。

S3ObjectInputStreamクラスのインスタンスをObjectMapper#readValueメソッドの第一引数に渡します。第二引数はnew TypeReference<Map<String, Object>>() {}にします。

これでMap<String, Object>が返ります。

以下、サンプルソースです。

package jp.co.confrage.samples;

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

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Sample {
  @SuppressWarnings("unchecked")
  public static void main(String[] args)
      throws JsonParseException, JsonMappingException, IOException {
    AWSCredentials credentials = new ProfileCredentialsProvider("default").getCredentials();
    AmazonS3 s3 =
        AmazonS3ClientBuilder.standard()
            .withCredentials(new AWSStaticCredentialsProvider(credentials))
            .withRegion("ap-northeast-1")
            .build();
    String bucketName = "confrage";
    String objectkey = "a.json";
    S3Object object = s3.getObject(new GetObjectRequest(bucketName, objectkey));
    S3ObjectInputStream s3Stream = object.getObjectContent();

    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, Object> inputJsonMap =
    objectMapper.readValue(s3Stream, new TypeReference<Map<String, Object>>() {});

    Map<String, Object> key = (Map<String, Object>) inputJsonMap.get("key1"); // 読み込む
    String key2 = (String) key.get("key2");
    String key3 = (String) key.get("key3");

    System.out.println(key2); // test2
    System.out.println(key3); // test3
  }
}

コメント

タイトルとURLをコピーしました