json_encode alternativa java

Olá pessoALL estou desenvolvendo uma aplicação que já tinha feito em php. Nesta aplicação pretendo transformar um array em uma string json, até aí tudo bem, encontrei bibliotecas em Java que fazem isso, no caso do Java em vez de um array utilizo um mapa (Map). O problema vem na codificação de caracteres especiais. Ex:

No php a função:
echo json_encode(array(“teste”=>“olá mundo”));

devolve:

{“teste”:“ol\u00e1 mundo”}

Como repararam existe no caracter especial “á” a transformação para unicode “\u00e1”

Neste contexto deixo de me preocupar com a codificação de caracteres pois ela é sempre reconhecida;

Conhecem alguma biblioteca em java que transforme “olá” em “ol\u00e1”.
Obrigado

Você não precisa de uma biblioteca. Basta usar o seguinte método (que você pode enxertar em uma classe qualquer):

    public static String encodeUnicode (String str) {
        StringBuilder sb = new StringBuilder();
        char[] chars = str.toCharArray();
        for (char ch : chars) {
            if (' ' <= ch && ch <= '\u007E') 
                sb.append (ch);
            else 
                sb.append (String.format ("\u%04x", ch & 0xFFFF));
        }
        return sb.toString();
    }

Exemplo de uso.

[code]
class TesteUnicode {
public static String encodeUnicode (String str) {
StringBuilder sb = new StringBuilder();
char[] chars = str.toCharArray();
for (char ch : chars) {
if (’ ’ <= ch && ch <= ‘\u007E’)
sb.append (ch);
else
sb.append (String.format ("\u%04x", ch & 0xFFFF));
}
return sb.toString();
}

public static void main (String[] args) {
    System.out.println (encodeUnicode ("olá mundo"));
}

}[/code]

Obviamente esse método só faz o encoding, não o JSON_ENCODE que é por sua conta.

Muito obrigado entanglement foi uma grande ajuda, era mesmo isso que estava a precisar.
Já agora a linha if (’ ’ <= ch && ch <= ‘\u007E’) identifica quais são os caracteres especiais certo?
Uma ajuda para ficar a perceber a linha, pode ser?

Mais uma vez obrigado

É justamente ao contrário: é para indicar quais são os caracteres normais (que vão de espaço até “~” - eu pus o “~” como “\u007E” só para te confundir um pouco :frowning: ). TODOS os outros são especiais.

Ah! ok. Olha mas são esses os caracteres que são iguais em todas as tabelas de charsets?

[quote]echo json_encode(array(“teste”=>“olá mundo”));

devolve:

{“teste”:“ol\u00e1 mundo”} [/quote]

Very good question! Alguém saberia fazer o equivalente em Java?