Skip to content
sábado, setembro 18, 2010 / eltonokada

Conflito to_json ActiveSupport

Tenho um json cadastrado em um campo do meu banco de dados, preciso editar o json e em seguida fazer o update no banco, até aí nada demais, o problema veio quando ao atualizar o json no banco, caracteres como ã, é e etc eram convertidos para unicode, isso acontecia quando fazia o seguinte:

class TesteController < ApplicationController

def meu_metodo

meujson = JSON.parse(‘{“teste”:”ÃO”}’)

meujson.to_json

end

end

com esse codigo a variável meujson recebia {“teste”:”\u00c3O”}

Para debugar resolvi executar a mesma operação em um programa ruby que fazia exatamente a mesma coisa, mas a variável meujson recebia {“teste”: “ÃO”}

Isolando o problema observei que existe um conflito do to_json.

O programa ruby que fiz usava o método to_json da gem json, mas o controller rails que extende o ApplicationController, usa o to_json do ActiveSupport, sobreescrevendo o método to_json da gem json que resolve o problema dos caracteres especiais.

Para contornar esse problema faça o seguinte:

salve o codigo abaixo em: config/initializers/patches.rb

module ActiveSupport

module JSON

module Encoding

class << self

def escape(string)

::JSON.generate([string])[1..-2]

end

end

end

end

end

pronto, agora você pode usar o to_json sem problemas !

É isso, caso alguém ache alguma solução mais elegante, comente ! Espero que seja útil😉

2 Comentários

Deixe um comentário
  1. Bruno Carvalho / out 21 2010 1:58 am

    Elton,

    Esse é um probleminha tenso de resolver hein hehe. Parabéns, debugar essas coisas é bem chatinho🙂

    Abracao,
    Bruno Carvalho

  2. Elton / out 21 2010 2:04 am

    Nem fala ! perdi horas resolvendo isso😉 abracos

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: