Hacker news

  • Top
  • New
  • Past
  • Ask
  • Show
  • Jobs

RX – a new random-access JSON alternative (https://github.com)

81 points by creationix about 9 hours ago | 31 comments | View on ycombinator

btown about 6 hours ago |

This is really interesting. At first glance, I was tempted to say "why not just use sqlite with JSON fields as the transfer format?" But everything about that would be heavier-weight in every possible way - and if I'm reading things right, this handles nested data that might itself be massive. This is really elegant.

My one eyebrow raise is - is there no binary format specification? https://github.com/creationix/rx/blob/main/rx.ts#L1109 is pretty well commented, but you can't call it a JSON alternative without having some kind of equivalent to https://www.json.org/ in all its flowchart glory!

dtech about 4 hours ago |

It's not quite clear to me why you'd use this over something more established such as protobuf, thrift, flatbuffers, cap n proto etc.

Levitating about 7 hours ago |

JSON is human-readable, why even compare it with this. Is any serialization format now just a "JSON alternative"?

jbverschoor 28 minutes ago |

So this is two things? A BSON-like encoding + something similar to implementing random access / tree walker using streaming JSON?

Docs are super unclear.

barishnamazov about 7 hours ago |

You shouldn't be using JSON for things that'd have performance implications.

50lo about 1 hour ago |

The biggest challenge for formats like this is usually tooling. JSON won largely because: every language supports it, every tool understands it.

Even a technically superior format struggles without that ecosystem.

garrettjoecox about 7 hours ago |

Very cool stuff!

This did catch my eye, however: https://github.com/creationix/rx?tab=readme-ov-file#proxy-be...

While this is a neat feature, this means it is not in fact a drop in replacement for JSON.parse, as you will be breaking any code that relies on the that result being a mutable object.

_flux about 2 hours ago |

It doesn't seem the actual serialization format is specified? Other than in the code that is.

Is it versioned? Or does it need to be..

WatchDog about 4 hours ago |

Cool project.

The viewer is cool, took me a while to find the link to it though, maybe add a link in the readme next to the screenshot.

transfire about 2 hours ago |

I am a little confused. Is this still JSON? Is it “binary“ JSON?

creationix about 9 hours ago |

A new random-access JSON alternative from the creator of nvm.sh, luvit.io, and js-git.

benatkin about 6 hours ago |

Interesting. I've heard about cursors in reference to a Rust library that was mentioned as being similar to protobuf and cap'n proto.

Does this duplicate the name of keys? Say if you have a thousand plain objects in an array, each with a "version" key, would the string "version" be duplicated a thousand times?

Another project a lot of people aren't aware of even though they've benefitted from it indirectly is the binary format for OpenStreetMap. It allows reading the data without loading a lot of it into memory, and is a lot faster than using sqlite would be.

Edit: the rust library I remember may have been https://rkyv.org/

Spivak about 7 hours ago |

I love these projects, I hope one of them someday emerges as the winner because (as it motivates all these libraries' authors) there's so much low hanging fruit and free wins changing the line format for JSON but keeping the "Good Parts" like the dead simple generic typing.

XML has EXI (Efficient XML Interchange) for precisely the reason of getting wins over the wire but keeping the nice human readable format at the ends.

Shahbazay0719 about 5 hours ago |

this is more nuanced than the title suggests. worth reading the whole thing

StephenZ15ga67 35 minutes ago |

this matches my experience exactly