Hacker News new | ask | show | jobs
by rafaelturk 2143 days ago
I'm also working with Brazilian instant payments schema, aka PIX. We've simply created a mapping layer to convert all ISO messaging to json.

Internally all our logic runs on json. It works because at the end of the day, payments only need a few fields to work: Source, Destination, Amount.

4 comments

Even the BCB itself has this ISO20022-xml to simpler-schema-in-json mapping layer.
>json

I hope you aren't using floats for cents!

Honest question. Would it differ if one used floats in json rather than floats in XML?
I wouldn't think so, the issue is not so much float in the storage layer (although precision in converting to and from the storage layer can make for interesting complications) it's floats in the applications layer.
No it would not, but you could use decimals in xml.

Edit: looks like there is no float in xml.

Nor are there floats in JSON! Json numbers are stored in decimal with varying lengths.
Yes, but almost any standard JSON package will map a number with decimals to their internal float.

While alternative parsers exists (javascript has LosslessJSON for example), they're a pain to use.

Using strings for floats only has a tiny overhead, but it allows users to use standard JSON parsers and it signals a good practice.

If you use JSON numbers to serialize money, you create a situation where the path with the least friction is the incorrect one.

> While alternative parsers exists (javascript has LosslessJSON for example), they're a pain to use.

FWIW in Python that's as uncomplicated as

    json.loads('1.1', parse_float=decimal.Decimal)
though of course it helps tremendously that `decimal` is part of the stdlib.
Numbers in JSON are stored as strings. So as long as encoder/decoder is storing them in suitable format e.g BigDecimal no precision need be lost.
That may be technically true, but decoding sad encoding JSON without reading numbers as doubles is a special feature.
what do you guys think of https://mojaloop.io/ vs ISO?
Quite scary to run financial transactions using an untyped format.
You'd be surprised just what kind of stuff goes through JSON to be parsed by unreliable Javascript engines 9ver software that doesn't correctly implement the JSON standard

>.<

Everything is JSON these days, unfortunately.
You can apply schemas and force integers although. You also have typed serialization formats such as protobuf.