У меня есть несколько интересный случай. У нас есть встроенные устройства, передающие данные JSON на наш сервер. Мы используем контрольную сумму для данных при отправке, поэтому устройство вычисляет контрольную сумму по полезной нагрузке и затем отправляет сообщение POST данных JSON.
Когда нет десятичных знаков с конечными нулями, у нас все хорошо. Тем не менее, если мы встретим ключ с double
/float
Ценность у нас в беде. Мы не можем использовать %g
форматирование на устройстве (STM32), поэтому нам нужно сделать что-то вроде %1.5i
чтобы получить десятичные точки, отправленные на сервер.
{
"key":"emXOlXEBv9",
"data":[
"key_with_trailing_zeros":12.200,
"time":"2017-12-22 19:35:41"}
],
"csum":"XXX"}
Так что теперь устройство вычисляет контрольную сумму по key
а также data
свойства. Когда мы отправляем его на сервер и после json_encode
мы получаем:
{
"key":"emXOlXEBv9",
"data":[
"key_with_trailing_zeros":12.2,
"time":"2017-12-22 19:35:41"}
],
"csum":"XXX"}
Хотя значение данных может использоваться нашей системой в порядке, контрольная сумма не выполняется, поскольку строковый буфер, используемый для вычисления контрольной суммы, несколько отличается.
Без фокусов я не могу использовать %f
или же %g
на устройстве, так что, какие варианты у меня есть, поверните все поля в строку и прочитайте числовое значение на сервере или есть какая-то волшебная пуля, которую я еще не нашел?
Задача ещё не решена.
Других решений пока нет …