Конвертировать JSON в хэш-карту с помощью Jackson-Java

1

Прежде чем это будет помечено как дубликат, пожалуйста, прочитайте вопрос (я посмотрел на аналогичные). Спасибо.

Для простоты предположим, что у меня JSON:

{
   "clients" : [
   {
      "name" : "client 1",
      "id" : 1
   },
   {
      "name" : "client 2",
      "id" : 2
   }
],
   "other" : {
      "something" : ""
   }

   ...
}

Поэтому я хочу создать хэш-карту только клиентов и их полей. Основной вопрос заключается в том, как я буду делать это с использованием методов Джексона для одного массива JSON, такого как клиенты? Я попытался посмотреть в Интернете, но все примеры, которые я видел, либо не используют Джексона, либо только для одного объекта JSON, например:

HashMap<String, String>[] values = new ObjectMapper().readValue(jsonString, new TypeReference<HashMap<String, String>[]>() {});

Я также видел примеры Gson, и я знаю, что могу сделать манеру синтаксического анализа строк:

jsonSting = jsonString.substring(jsonString.indexOf("["), (jsonString.indexOf("]")+1))

чтобы получить его в формате, который я могу использовать, но я хочу попробовать его с Джексоном, чтобы избежать импорта другой библиотеки. Есть идеи?


Перефразируя вопрос: Итак, если бы у меня был только список клиентов:

jsonString = [{"name" : "client 1","id" : 1},{"name" : "client 2","id" : 2}]

то я мог бы просто сделать:

HashMap[] values = new ObjectMapper().readValue(jsonString, new TypeReference[]>() {});

чтобы получить то, что я хочу. Я в основном спрашиваю, есть ли способ использовать методы Джексона, чтобы получить jsonString выше из большой секции JSON сверху. Я знаю, что я могу легко сделать это с помощью этого примера с помощью синтаксического анализа строк, но в будущем будут более сложные ситуации, и синтаксический анализ строк не будет считаться наилучшей практикой

  • 0
    Пожалуйста, опишите целевую хэш-карту. Каковы его ключи? Каковы его ценности?
  • 0
    у вас есть API, найдите пример, попробуйте
Показать ещё 10 комментариев
Теги:
jackson

1 ответ

2

Вы можете извлечь часть дерева JSON с помощью API-модели дерева Jackson, а затем преобразовать ее в массив карт.

Вот пример:

public class JacksonReadPart {
    public static final String JSON = "{\n" +
            "   \"clients\" : [\n" +
            "   {\n" +
            "      \"name\" : \"client 1\",\n" +
            "      \"id\" : 1\n" +
            "   },\n" +
            "   {\n" +
            "      \"name\" : \"client 2\",\n" +
            "      \"id\" : 2\n" +
            "   }\n" +
            "],\n" +
            "   \"other\" : {\n" +
            "      \"something\" : \"\"\n" +
            "   }\n" +
            "\n" +
            "}";

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode node = mapper.readTree(JSON).path("clients");

        // non type safe
        Map<String, Object>[] clients = mapper.treeToValue(node, Map[].class);
        System.out.println(Arrays.toString(clients));

        // type safe
        JsonParser parser = mapper.treeAsTokens(node);
        clients = parser.readValueAs(new TypeReference<Map<String, Object>[]>() {});
        System.out.println(Arrays.toString(clients));
    }
}

Вывод:

[{name=client 1, id=1}, {name=client 2, id=2}]
[{name=client 1, id=1}, {name=client 2, id=2}]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню