Guava Spliter возвращает мне коллекцию, но я хочу HashMap - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь преобразовать строку JSON (возвращенную в HTTP-ответе веб-службой) в HashMap. В Python я мог бы просто использовать json.loads(string_response), и это дало бы мне хороший словарь. Я пытаюсь найти похожую вещь в Java.

Мой фрагмент -

String result = "{\"packetsReceived_Audio\":\"\",\"packetsReceived_Screen\":\"\",\"packetsReceived_Video\":\"\",\"packetsSent_Audio\":\"\",\"packetsSent_Screen\":\"\",\"packetsSent_Video\":\"\",\"sequenceNumber\":\"0\"}";
Map map = Splitter.on(",").withKeyValueSeparator(":").split(result);

Как один из комментариев ниже указывает, что он уже должен возвращать хэш-карту, на самом деле это не так. Это возвращает мне коллекцию с каждым элементом, содержащим подэлементы - «ключ» и «значение». Смотрите прилагаемое изображение для ясности. Я ожидаю, что это HashMap.

Debug window from IntelliJ

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

Спасибо!

1 Ответ

3 голосов
/ 17 апреля 2019

Splitter возвращает карту после того, как вы позвоните withKeyValueSeparator. Посмотрите на выделенный серым цветом текст {}, в котором указано, какой тип переменной карты. Это неизменяемая карта, которая реализует карту. Вы также видите набор записей, потому что ваша IDE анализирует внутреннюю реализацию неизменяемой карты.

В любом случае, я думаю, вам лучше использовать библиотеку, специально созданную для анализа json. Он будет обрабатывать угловые случаи, такие как значения json, содержащие двоеточия. Вот несколько примеров в Jackson .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...