1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Jacksonの JsonNode を使ってJSONの特定のキーを取得しようとしたとき、そのキーが存在しない場合は NullPointerException が発生します。

Last updated at Posted at 2024-04-11

Jacksonを使用して、深い階層のJSONの値を変更するには、次の手順に従います。

  • JSON文字列をJavaオブジェクトにデシリアライズします。
  • 必要な値を変更します。
  • 変更したJavaオブジェクトをJSON文字列にシリアライズします。

Jacksonの JsonNode を使ってJSONの特定のキーを取得しようとしたとき、そのキーが存在しない場合は JNullPointerException が発生します。このため、キーが存在するかどうかを事前にチェックすることが重要です。

以下の例で rootNode.get("a").get("b") のようなコードを使用すると、もしキー "a" や "b" が存在しない場合に NullPointerException が発生します。したがって、キーが存在するかどうかをチェックするために has メソッドを使用することが推奨されます。

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class Main {
    public static void main(String[] args) throws Exception {
        // JSON文字列
        String json = "{\"a\":{\"bd\":{\"c\":123}}}";

        // JacksonのObjectMapperを作成
        ObjectMapper mapper = new ObjectMapper();

        // JSON文字列をJavaオブジェクトにデシリアライズ
        JsonNode rootNode = null;
		try {
			rootNode = mapper.readTree(json);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}

		try {
            // キーの存在をチェックしてから値を変更
			if (rootNode.has("a") && rootNode.get("a").has("b")) {
				((ObjectNode) rootNode.get("a").get("b")).put("c", 456);
			} else {
				System.out.println("Key 'a' or 'b' does not exist.");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
        // 変更後のJSON文字列を取得
        String updatedJson = null;
		try {
			updatedJson = mapper.writeValueAsString(rootNode);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}

        System.out.println(updatedJson);
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?