user1052610
user1052610

Reputation: 4719

How to create a nameless Json array with Jackson

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

Answers (2)

Krzysztof Krzeszewski
Krzysztof Krzeszewski

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

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

Related Questions