Multiplos valores Json + vraptor 3

Olá estou com seguinte duvida como faço para conseguir um json assim:
descricao : valor

os exemplos que vi eram tudo com algo do tipo
criar um objeto que tem os campos descricao e outro valor… e dai serializar o objeto

o que dari algo ± assim :

o que não me adianta =S

já tentei algo assim:

result.use(Results.json()).from("rafael", "1").serialize(); result.use(Results.json()).from("eduardo", "2").serialize();

mas não deu certo.

grato.

[quote=jingle]Olá estou com seguinte duvida como faço para conseguir um json assim:
descricao : valor

[/quote]
isso não é json válido… o que vc quis dizer é isso?

serializando um HashMap<String,String>, vc teria algo assim:

[ ["rafael", "1"], ["eduardo", "2"] ]

se vc quiser algo diferente disso você pode criar um converter pra sua entidade,
daí pode ficar do jeito que vc quer…

se precisar de ajuda pra fazer esse converter me dá um toque

é preciso realmente fazer um assim :

{"rafael":"1", "eduardo":"2"}

aquele com map não me adiantou…

consegue me da uma mão pra criar o converter?

acho que isso resolve:

public class MeuMapConverter implements Converter {

	@Override
	public boolean canConvert(Class clazz) {
		return Map.class.isAssignableFrom(clazz);
	}
	
	public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
		writer.startNode("map");
		Map<?,?> map = (Map<?,?>) obj;
		for (Entry<?,?> entry : map.entrySet()) {
			writer.addAttribute(entry.getKey().toString(), entry.getValue().toString());
		}
		writer.endNode();
	}

	public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) {
		return null; // não precisa
	}
}

daí vc só precisa registrar esse converter no xstream:

  • crie uma classe q estende XStreamJSONSerialization
  • sobrescreva o método getXStream
  • chame o super.getXStream(), salve numa variável, e chame o registerConverter(new MeuMapConverter()) nela