On Tuesday, July 20, 2021 at 1:33:52 AM UTC-7 [email protected] wrote: > I am creating a JSON using the `Jackson JsonGenerator` approach and > everything seems to work perfectly fine apart from a minor glitch. I would > like to move the particular key present in the created JSON to the top of > the JSON. > > I am creating a key `schema` which appears at the bottom of the JSON. I > would like to know if there is a way to move it to the top of the JSON > after finished creating the JSON. > > > Following is the JSON that I am creating: > ``` > public class JacksonTest { > public static void main(String[] args) throws IOException { > StringWriter jsonObjectWriter = new StringWriter(); > JsonGenerator jsonGenerator = new > JsonFactory().createGenerator(jsonObjectWriter).useDefaultPrettyPrinter(); > jsonGenerator.writeStartObject(); > jsonGenerator.writeStringField("a", "Value-A"); > jsonGenerator.writeStringField("c", "Value-C"); > jsonGenerator.writeStringField("b", "Value-B"); > jsonGenerator.writeStringField("schema", "2.0"); > jsonGenerator.close(); > jsonGenerator.flush(); > System.out.println(jsonObjectWriter.toString()); > } > } > > ``` > > Following is the output I am getting: > ``` > { > "a" : "Value-A", > "c" : "Value-C", > "b" : "Value-B", > "schema" : "2.0" > } > ``` > > I would like to convert the JSON something like this: > ``` > { > "schema" : "2.0", > "a" : "Value-A", > "c" : "Value-C", > "b" : "Value-B" > } > ``` > > I would like to fetch the `schema` from my created JSON and add it to the > top of the JSON. > > `Please Note:` > 1. I am aware the JSON order does not matter but I am doing this for > better readability purposes. If there is a way then it would be really > useful for the reader to understand the JSON better. > > 2. I am aware that I can create the `schema` at first in this code but > this is just a sample application that I have provided for ease of > understanding. In my real application, I have a `Map` that is populated > dynamically throughout the execution and I am adding it at the end of the > JSON creation. If I add at the first then I will miss out on a few of the > values which are populated after creation so I am adding at the end but I > want this to appear at the top of the JSON so trying to move to the top. > > 3. I want to know if there is a direct way to do it rather than looping > over the JSON, as my created JSON in the real application can be pretty > large. > > I would really appreciate it if there was a way to do it or is there any > workaround for this. >
Streaming generator outputs things exactly in order you specify: only encoding buffer is kept in memory. So there is no way to inject/reorder/change output at that level. But perhaps you should consider using databind level, constructing `ObjectNode` (mapper.createObjectNode()), modifying that, then serializing as JSON? -+ Tatu +- -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/2bee2ce8-8be1-4727-baec-776d1b472f71n%40googlegroups.com.
