Re:JSON River – Parse JSON incrementally as it streams in
by simonw on Monday October 13, 2025 @12:59PM
(#45570672)
If you're building a UI that renders output from a streaming LLM you might get back something which looks like this:
Incomplete parsing with incomplete strings is still useful in order to render that to your end user while it's still streaming in.
[ Parent
| on HN ]
Re:JSON River – Parse JSON incrementally as it streams in
by trevor-e on Monday October 13, 2025 @02:30PM
(#45571757)
In this example the value is incomplete, not the key.
Re:JSON River – Parse JSON incrementally as it streams in
by cozzyd on Monday October 13, 2025 @01:05PM
(#45570752)
incomplete strings could be fun in certain cases
{"cleanup_cmd":"rm -rf /home/foo/.tmp" }
Re:JSON River – Parse JSON incrementally as it streams in
by stronglikedan on Monday October 13, 2025 @02:35PM
(#45571804)
If any part of that value actually made it, unchecked, to execution, then you have bigger problems than partial JSON keys/values.
Re:JSON River – Parse JSON incrementally as it streams in
by rictic on Monday October 13, 2025 @01:21PM
(#45570934)
Yeah, another fun one is string enums. Could tread "DeleteIfEmpty" as "Delete".
Re:JSON River – Parse JSON incrementally as it streams in
by Waterluvian on Monday October 13, 2025 @01:55PM
(#45571354)
I imagine if you reason about incomplete strings as a sort of “unparsed data” where you might store or transport or render it raw (like a string version of printing response.data instead of response.json()), but not act on it (compare, concat, etc), it’s a reasonably safe model?
I’m imagining it in my mental model as being typed “unknown”. Anything that prevents accidental use as if it were a whole string… I imagine a more complex type with an “isComplete” flag of sorts would be more powerful but a bit of a blunderbuss.
Re:JSON River – Parse JSON incrementally as it streams in
by sublee on Monday October 13, 2025 @08:33PM
(#45574900)
Incremental JSON parsing is key for LLM apps, but safe progressive UIs also need to track incompleteness and per-chunk diffs. LangDiff [1] would help with that.
[1]: https://github.com/globalaiplatform/langdiff/tree/main/ts