Reputation: 4719
The following JSON is required:
{[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"value}]}
Using:
JsonGenerator generator = factory.createGenerator(os, JsonEncoding.UTF8);) {
generator.writeStartObject();
generator.writeFieldName("data");
generator.writeStartArray();
while (rs.next()) {
generator.writeStartObject();
generator.writeStringField("value", rs.getString("value"));
generator.writeEndObject();
}
generator.writeEndArray();
generator.writeEndObject();
generator.close();
outputs:
{"data":[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"value}]}
I don't want the data label, but if
generator.writeFieldName("data");
is removed, the following error is thrown:
com.fasterxml.jackson.core.JsonGenerationException: Can not start an array, expecting field name (context: Object)
What is the correct way to do this?
Thanks
Upvotes: 2
Views: 1217
Reputation: 6749
It seems that you might want to just omit the root object declaration and leave it as an array, as it not a valid json format.
JsonGenerator generator = factory.createGenerator(os, JsonEncoding.UTF8);
generator.writeStartArray();
while (rs.next()) {
generator.writeStartObject();
generator.writeStringField("value", rs.getString("value"));
generator.writeEndObject();
}
generator.writeEndArray();
generator.close();
this would return valid json
format being:
[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"}]
Upvotes: 5
Reputation: 741
The answer from @krzysztof-krzeszewski is better and gives the desired result.
Firstly your json example includes a "value" outside any quotes but I am guessing that is a typo. The problem is that:
{[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"}]}
Is simply not valid json. You have to add an attribute name to the array because until it has a name it is not valid. Here is the example you included as valid json with typo fixed.
{"data":[{"value":"1"}, {"value":"2"}, {"value":"3"}, {"value":"4"}]}
Upvotes: 1