jansson icon indicating copy to clipboard operation
jansson copied to clipboard

New flag JSON_DECODE_BIGINT_AS_REAL

Open mjh-c opened this issue 1 year ago • 0 comments

We encountered a use case where we received a very large integer within a JSON payload in a REST call. From the (OpenAPI) schema point of view, the value is of real type in fact, but the JSON serializer on client side decided to send it as a large integer value. In the concrete case, a real value 1.7E19 was added as 17000000000000000000 to the JSON payload. This integer is too big to fit into the integer type json_int_t. jansson does not accept that and returns "too big integer near '17000000000000000000'".

Using the decoder flag JSON_DECODE_INT_AS_REAL is not an option, since the payload also contains large integers that fit into json_int_t (64-bit ID values, for example) and they would be silently modified by rounding which would break the whole application.

The idea is to introduce a new decoder flag JSON_DECODE_BIGINT_AS_REAL that works similar to JSON_DECODE_INT_AS_REAL but only converts too big integers to real type and leaves integers that fit into json_int_t unmodified. This would perfectly satisfy our needs. Bringing in this new decoder flag is non-intrusive and would leave the old behavior completely unchanged.

I already prepared a branch and will create a PR for review if you don't mind.

mjh-c avatar Sep 24 '24 06:09 mjh-c