2017-02-21 26 views
1

У меня проблема с JSON, которую я должен получить от моего запроса POST.Убрать запрос на удаление json-кода

На самом деле мне нужно сравнить 2 строки подписи, которые в одной точке содержат часть JSON. Скажем, они, как:

val signature = "someText+" + Json.stringify(jsonValue) + "+anotherText" 

2 подписей Я должны быть похожи, но jsonValue я получаю от request.body имеет свои десятичные с 0 удален (как 12.0 становится 12), поэтому подписи разные ,

Есть ли способ избежать десятичного удаления? Благодаря!

+0

ли десериализации не вариант? – Coder

ответ

2

Это «нормальное» поведение JSON, потому что нет разницы между 12.0 и 12 в стандарте JSON.

From wiki:

Номер: подписанный десятичное число, которое может содержать дробную часть и может использовать экспоненциальную E обозначения, но не может включать в себя не-числа, как NaN. Формат не делает различий между целыми числами и с плавающей запятой. JavaScript использует формат с плавающей запятой с двойной точностью для всех своих числовых значений, но другие языки, реализующие JSON может кодировать номера по-разному.

Таким образом, вам не нужно беспокоиться о том, что вы отправите дальше 12,0 или 12, потому что в JSON нет таких вещей, как «целое» или «плавание». Следующее преобразование на следующем шаге может снова перевернуть его.

UPDATE

Вы говорите, что нужно для создания подписи. Кто-то проверит эту подпись, и кто-то также сможет конвертировать этот JSON в некоторые типы и обратно (почему бы и нет? Так же, как вы это сделали), и может получить другой результат. Разные, но правильные. Главное здесь, что вы не можете использовать JSON для генерации подписи (и речь идет не только о числах, это всего лишь одна из точек). То, что вы делаете - вы используете String для создания подписи, а не JSON.

Теперь о строке вам нужно получить необработанное тело запроса. В Scala:

def index = Action(parse.tolerantText) { request => 
    val jsonAsString = request.body 
} 
+0

Да, я понимаю, что вы имеете в виду, но дело в том, что мне нужно построить строковую подпись с использованием этого и многих других полей, поэтому строка с .0 или не изменяет все, как я должен сравнивать ее с другой, которая имеет ее – Guigui

+0

Посмотрите на мое обновление –

1

Хорошо, я попытался посмотреть на парсерах тела Play и parse.tolerantText сделал работу, чтобы заставить преобразовать JSON в строку, и десятые здесь :)