-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||||||||||||||||
1 | ||||||||||||||||
Взять внутренний JSON как строку07.08.2020, 11:32. Просмотров 2247. Ответов 5
Метки нет Все метки)
(
Добрый день.
Очень нужна ваша помощь. Есть JSON, который можно представить в ява объектах как:
Цель - нужно взять внутренний объект target, как строку. То есть распарсить внешний json, не трогая внутренний. Я думал, что это просто и вообще является тривиальной операцией. Но ничего подобного - я не нашел, как это сделать. Тогда я пошел на хитрость и использовал в качестве дженерика класс Object. Тогда я получал то, что мне нужно. Почти. Я распарсивал внутренний объект и Обджект и обратно сериализовал его в строку. Но тут происходит страшная вещь, которая руинит смысл внутреннего объекта. Вот такая штука:
То есть он классический INT переводит в DOUBLE. Из-за чего у меня руинится дальнейший парсинг, когда он нужен: Expected an int but was 1.00000248733E11 at line 1 column 939 path $.client.id. И вот что мне делать? Есть два пути: Либо искать способ вырезать внутренний json в первозданном виде. Либо искать, как заменить при парсинге вещественные числа на целые. Помогите, пожалуйста. Добавлено через 18 минут Упс, я только что понял, что значение id = 100000248745 больше, чем максимальный инт. Поэтому оно в него и не записывалось. Однако, это не снимает вопрос: можно ли получить внутренний объект в первозданном виде?
0
|
|
07.08.2020, 11:32 | |
Как взять строку из файла
Как взять строку из ListBox по индексу? |
|
Модератор
1425 / 425 / 140
Регистрация: 11.08.2017
Сообщений: 1,445
|
|||||||||||
07.08.2020, 12:40 | 2 | ||||||||||
Добавлено через 15 минут Либо пример сериализации/десериализации с дженериками Кликните здесь для просмотра всего текста
0
|
![]() 2359 / 2189 / 558
Регистрация: 28.12.2010
Сообщений: 8,566
|
|
07.08.2020, 12:42 | 3 |
с чего бы? У тебя в джсоне лежит 1.00000248745E11 почему он должен когда-то превратиться в 100000248745?
Зачем дженерики использовать? Напиши просто Object target или Map target
0
|
Модератор
1425 / 425 / 140
Регистрация: 11.08.2017
Сообщений: 1,445
|
|
07.08.2020, 12:57 | 4 |
сериализуется не в массив объектов а в объекты через запятую грубо говоря
То есть Map<String, Object> будет иметь вид "target":{"String":{Object}, "String":{Object}, "String":{Object}}, причем вроде во всех Map-ах ключи должны быть уникальными, а тут судя по названию ключи не уникальные.
0
|
![]() 2359 / 2189 / 558
Регистрация: 28.12.2010
Сообщений: 8,566
|
|
07.08.2020, 13:02 | 5 |
да, не заметил что там массив. Тогда лист Object норм. Оbect по факту все равно будет инстансом MultiMap в рантайме
0
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||||||
07.08.2020, 14:18 [ТС] | 6 | |||||
Есть json. Я написал, как его можно представить в программисто-читаемом виде - в виде списка объектов неизвестной структуры. И есть одинаковая над ними обертка.
В ява-классах это можно представить как дженерик класс. Так что тут не стоит вопрос использования/не использования. Просто так есть. Тут я понял, что изначально неверно расписал задачу. Не приведя пример верного json. Смысл в том, что изначально json мне приходит в виде
То есть ИД клиентов, что логично, представлены int'ом. А когда я уже извлекаю список внутренних объектов, то тип размывается в более "безопасный" - double. Как оказалось, это не является проблемой. Я думал, что ошибка преобразования возникает именно из-за типов: требуется инт, а на входе дабл. Но нет, оказалось именно из-за вместимости типа. Теперь задача лежит число в эстетической плоскости. Так как проблема изменения типов при извлечении внутреннего json'а проблемой и не является.
0
|
07.08.2020, 14:18 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Как парсить строку json? Как взять строку из файла и сделать ее переменной? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |