У меня есть модель, которые имеют HashMap
, как вы видели ниже:Как сериализовать HashMap как ArrayList как JSON?
private Map<String, String> attrMap = new HashMap<String, String>();
и инициализировать его следующим образом:
attrMap.add("name", "value of name");
attrMap.add("content", "value of content");
, но я хочу, чтобы сериализовать это поле как ArrayList
объектов, как это:
[{name: "value of name"}, {content: "value of content"}]
ОБНОВЛЕНИЕ 1
Есть ли способ вызова функции во время сериализации, как это:
@JsonSerializer(serializeAttrMap)
private Map<String, String> attrMap = new HashMap<String, String>();
public String serializeAttrMap() {
ArrayList<String> entries = new ArrayList<>(this.attrMap.size());
for(Map.Entry<String,String> entry : attrMap.entrySet())
entries.add(String.format("{%s: \"%s\"}",
entry.getKey(), entry.getValue()));
return Arrays.toString(entries.toArray());
}
UPDATE 2
Я использую этот класс для сериализации attrMap
, но получить can not start an object expecting field name
ошибку.
import java.io.IOException;
import java.util.Map;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
public class AttrMapSerializer extends JsonSerializer<Map<String, String>> {
@Override
public void serialize(Map<String, String> attributes, JsonGenerator generator, SerializerProvider provider) throws IOException, JsonProcessingException {
for (Map.Entry<String, String> attribute : attributes.entrySet())
{
generator.writeStartObject();
generator.writeObjectField("name", attribute.getKey());
generator.writeObjectField("content", attribute.getValue());
generator.writeEndObject();
}
}
}
Я новичок в Jackson
Итак, создайте ArrayList, а затем сериализуйте его. –
@RasoolGhafari - Я обновил свой ответ, чтобы отразить ваше обновление. Обратите внимание, что нет возможности работать с аннотацией '@ JsonSerialize' именно так, как вы просили. Вам нужно предоставить класс, который наследует 'JsonSerializer'. – wassgren