Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Support writing JsValue directly to OutputStream #1126

Open
here-abarany opened this issue Feb 14, 2025 · 0 comments · May be fixed by #1127
Open

[Feature] Support writing JsValue directly to OutputStream #1126

here-abarany opened this issue Feb 14, 2025 · 0 comments · May be fixed by #1127

Comments

@here-abarany
Copy link

When writing JSON data from the Scala framework with JVM, you currently only have options to convert the JsValue instances to a string or byte array. However, if you have a particularly large JSON file, this can cause a large memory spike as it needs to buffer the whole file in memory before dumping to disk. Ideally there should be a function on the JSON facade object to expose writing a JsValue to an OutputStream, which could call the the writeValue() overload on Jackson's ObjectMapper that takes an OutputStream.

here-abarany added a commit to here-abarany/play-json that referenced this issue Feb 14, 2025
Added JsonFacade functions writeToStream and prettyPrintToStream to support
writing to an OutputStream without first writing the full string to memory.
The JVM implementation forwards these calls to the appropriate functions in
Jackson.

For now, the non-JVM implementations will build up the full string in
memory. Ideally the strings should be written out as they are built up, but
this would require a refactoring of the fromJs() function to support an
interface to feed each string value and minimize the number of conversions
to UTF-8 (for toBytes and writing to stream) or avoid conversions (for
String). For now, this fulfills the interface guarantee while providing the
same level of functionality as before.

Fixes playframework#1126
here-abarany added a commit to here-abarany/play-json that referenced this issue Feb 14, 2025
Added JsonFacade functions writeToStream and prettyPrintToStream to support
writing to an OutputStream without first writing the full string to memory.
The JVM implementation forwards these calls to the appropriate functions in
Jackson.

For now, the non-JVM implementations will build up the full string in
memory. Ideally the strings should be written out as they are built up, but
this would require a refactoring of the fromJs() function to support an
interface to feed each string value and minimize the number of conversions
to UTF-8 (for toBytes and writing to stream) or avoid conversions (for
String). For now, this fulfills the interface guarantee while providing the
same level of functionality as before.

Fixes playframework#1126
here-abarany added a commit to here-abarany/play-json that referenced this issue Feb 14, 2025
Added JsonFacade functions writeToStream and prettyPrintToStream to support
writing to an OutputStream without first writing the full string to memory.
The JVM implementation forwards these calls to the appropriate functions in
Jackson.

For now, the non-JVM implementations will build up the full string in
memory. Ideally the strings should be written out as they are built up, but
this would require a refactoring of the fromJs() function to support an
interface to feed each string value and minimize the number of conversions
to UTF-8 (for toBytes and writing to stream) or avoid conversions (for
String). For now, this fulfills the interface guarantee while providing the
same level of functionality as before.

Fixes playframework#1126
@here-abarany here-abarany linked a pull request Feb 14, 2025 that will close this issue
5 tasks
here-abarany added a commit to here-abarany/play-json that referenced this issue Feb 14, 2025
Added JsonFacade functions writeToStream and prettyPrintToStream to support
writing to an OutputStream without first writing the full string to memory.
The JVM implementation forwards these calls to the appropriate functions in
Jackson.

For now, the non-JVM implementations will build up the full string in
memory. Ideally the strings should be written out as they are built up, but
this would require a refactoring of the fromJs() function to support an
interface to feed each string value and minimize the number of conversions
to UTF-8 (for toBytes and writing to stream) or avoid conversions (for
String). For now, this fulfills the interface guarantee while providing the
same level of functionality as before.

Fixes playframework#1126
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant