Giter VIP home page Giter VIP logo

Comments (7)

liveforeverx avatar liveforeverx commented on August 14, 2024 5

@michalmuskala Like this: https://github.com/talentdeficit/jsx#incomplete-input

Something, what allows to decode json partially on the fly without needing to get the whole json.

from jason.

tsutsu avatar tsutsu commented on August 14, 2024 2

Also, how about streaming encoding, when your top-level input term can be guaranteed to be Enumerable?

Basically, an API function to do this (with perhaps lower overhead):

Stream.concat([
  ["[\n"],
  my_huge_stream |> Stream.map(&Jason.encode_to_iodata!) |> Stream.intersperse(",\n"),
  ["]"]
])
|> Enum.into(File.stream!("foo"))

from jason.

michalmuskala avatar michalmuskala commented on August 14, 2024

What exactly do you mean by streaming?

from jason.

OvermindDL1 avatar OvermindDL1 commented on August 14, 2024

I think they mean SAX-style support for reading maybe? I guess?

from jason.

michalmuskala avatar michalmuskala commented on August 14, 2024

Ah. Thanks. I think such a feature indeed makes sense.

I even did some work on implementing it in #3, but ultimately abandoned it before 1.0 due to complexity, but I think it makes sense to implement it now. This should also allow decoding directly from iodata without converting to a single string first, which might also help with performance in some cases.

The only problem with streaming decoding is handling of numbers - you never know when they end, but I think it will be reasonable to require top-level values to be either strings, objects or arrays.

from jason.

jjl avatar jjl commented on August 14, 2024

Any news on this? I'm willing to pitch in if it helps move things on, but I've no idea where to start.

from jason.

michalmuskala avatar michalmuskala commented on August 14, 2024

As mentioned in #34 if your JSON is line-delimited (and in most "streaming" cases it actually is), the problem is trivial - split on newlines and feed each part separately to Jason.decode/2.

Full streaming implementation is going to be rather complex and will require significant changes to the parser - the simplest approach would be to return a continuation at each point in the parser where it errors with the "unexpected eof" error. Later the user could call the continuation with more data.

There was some initial work in #3, but I abandoned it in favour of releasing 1.0 faster. Unfortunately, I probably won't have time to work on this soon.

from jason.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.