Задать вопрос
@P747

Имеется ли разница в мобильном Java приложении между double и int в JSON ответе?

Вопрос больше к Java разработчикам на Android, имеется ли разница в мобильном Java приложении между double и int в JSON ответе? Тоесть если сервис API ответил JSON структурой, в одном из свойств вместо 0.00 или 5.00 выдало 0 или 5.
Пример:
{"value": 0.00} или {"value": 5.00}
А выдало:
{"value": 0} или {"value": 5}
  • Вопрос задан
  • 168 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 3
EreminD
@EreminD
Кое-что умею
у JSON есть только тип number
и 5.0 и 5 - оба значения валидны, с точки зрения JSON

633eab5010109238785685.png

Тут вопрос к тому, кто создает json или кто его интерпретирует.
Готова ли сторона-приемник, что может прилететь число 5.5, например?

Если вам нужен строго int, по-хорошему, должен быть код, который принимает double и пытается преобразовать к инту
Ответ написан
Vest
@Vest
Попробую ответить: если вы работаете с JSON, то стандарт говорит вам следующее:
value:
    ...
    number
    ...

Это то, что может быть в качестве одного из значений. Что такое number?

number
    integer fraction exponent

Или "целое", "(десятичный) разделитель" и "дробная часть".

Как вы понимаете, никто вам ничего не гарантирует. Может быть будет точка, а может и нет. Всё, как в JavaScript. Поэтому, если у вас схема JSON'а неизвестна, то вы можете это трактовать как получится.

Но если это "валюта" или что-то важное, где округление не допустим, то я бы попросил владельца API пересмотреть эту часть
Ответ написан
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Вобщем вики пишет по поводу самого стандарта JSON:
Number: a signed decimal number that may contain a fractional part and may use exponential E notation, but cannot include non-numbers such as NaN. The format makes no distinction between integer and floating-point. JavaScript uses IEEE-754 double-precision floating-point format for all its numeric values (until later also supports BigInt[24]), but other languages implementing JSON may encode numbers differently.


Вобщем получается что стандарту пофиг. И интерпретацию числа он отдает на откуп программным средствам.
И мне кажется что Андроид здесь вообще не при делах. Это слишком общее понятие. Гораздо важнее какой JSON-парсер вы используете в коде. Всего парсеров - огромный вагон. Но я вот регулярно использую 2 из них.
- Google GSON.
- Jackson
Вот попробуйте распарсить ваш документ с использованием г-сона и джаксона и посмотрите что будет на выходе. Там почти всегда рекурсивное дерево из таких шаблонов LinkedHashmap[String,Object] где вместо обжекта будет стоять то что вы ищете.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы