Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpApJsn 242 of 322 menu
◀ ▶

Разбор JSON-тела в Java

Тело ответа API - это всегда текст. Перед разбором его удобно сохранить в переменную, даже если строка уже задана в программе. Jackson читает ключи по именам компонентов record, в том числе когда значение само является объектом.

Для блока user объявляют отдельный тип, а корневой record ссылается на него компонентом:

public record Person(String name, String surn) {} public record ProfileDoc(Person user, String city) {}

Готовый фрагмент JSON можно разобрать сразу в ProfileDoc и обратиться к вложенным полям через точку:

import com.fasterxml.jackson.databind.ObjectMapper; public record Person(String name, String surn) {} public record ProfileDoc(Person user, String city) {} public class Main { public static void main(String[] args) throws Exception { String raw = """ { "user": { "name": "john", "surn": "smit" }, "city": "London" } """; ObjectMapper mapper = new ObjectMapper(); ProfileDoc doc = mapper.readValue(raw, ProfileDoc.class); System.out.println(doc.user().name()); System.out.println(doc.city()); } }

Если в корне лежит массив строк, тип задают через TypeReference. Порядок элементов в списке совпадает с порядком в JSON:

import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; public class Main { public static void main(String[] args) throws Exception { String raw = "[\"alpha\",\"beta\",\"gamma\"]"; ObjectMapper mapper = new ObjectMapper(); List<String> tags = mapper.readValue( raw, new TypeReference<List<String>>() {}, ); System.out.println(String.join(",", tags)); } }

Дана строка:

String raw = """ { "user": { "name": "john", "surn": "smit" }, "city": "London" } """;

Опишите record для user и корня. Выведите имя и город на отдельных строках.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить