Serializar objeto Json/Python

278 views
Skip to first unread message

Adeilson souza da silva

unread,
Oct 18, 2014, 10:37:55 AM10/18/14
to python...@googlegroups.com
Bom dia,
estou tentando serializar o seguinte arquivo de forma que eu consiga extrair os campos que me interessam. Já tentei de várias formas com pickle, dumps, dump, loads mas sempre obtenho erros como: not serializable json, TypeError: string indices must be integers, TypeError: is not JSON serializable ou
ValueError: Expecting property name: line 1 column 1 (char 1).

Alguém pode dar uma ajuda, estou tentando entender como faço, mas ta complicado. Tem muita coisa que ainda quero aprender e
esses erros estão me fazendo perder tempo pois não sei resolvê-los.
Acho que meu arquivo está em um formato json inválido ou ilegível.Será?
 
Aqui o arquivo de leitura:

https://gist.github.com/anonymous/acbd70c0616e4225764c

Obs: esses dados são salvos em uma linha por vez.

Marcelo Elias Del Valle

unread,
Oct 18, 2014, 11:22:06 AM10/18/14
to python...@googlegroups.com
Isso não é um json. 
Json tem aspas duplas, isso aí tem aspas simples, provavelmente foi gerado fazendo str() em um dict.
[]s

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Marcelo Elias Del Valle
http://mvalle.com - @mvallebr

Geovani de Souza

unread,
Oct 18, 2014, 11:24:06 AM10/18/14
to python...@googlegroups.com
Adeilson, copiei o conteúdo do seu gist e salvei num arquivo entrada.py dessa forma:

CONTEUDO = <conteúdo do gist>

Depois naveguei até o diretório que continha o arquivo, entrei no python e digitei:

import json
import entrada
with open('saida.json', 'w') as f:
   json
.dump(entrada.CONTEUDO,f)

Abri o arquivo e testei o conteúdo gerado no sublime com o plugin "Pretty JSON" e ele formatou normalmente.

Imagino que o problema não esteja na serialização, mas talvez na forma como vc está extraindo "os campos que te interessam". Vc pode compartilhar o código que apresenta o problema?

Adeilson souza da silva

unread,
Oct 18, 2014, 11:25:02 AM10/18/14
to python...@googlegroups.com
Entendi, mas tem como eu converter pra Json novamente? Ou esses meus dados são inválidos?

Geovani de Souza

unread,
Oct 18, 2014, 11:26:07 AM10/18/14
to python...@googlegroups.com
Sim, vc pode serializar seu dict diretamente através do módulo `json`, por exemplo

Marcelo Elias Del Valle

unread,
Oct 18, 2014, 11:26:47 AM10/18/14
to python...@googlegroups.com

Adeilson souza da silva

unread,
Oct 18, 2014, 11:32:13 AM10/18/14
to python...@googlegroups.com
OI, segue meu código:

https://gist.github.com/anonymous/d8e1230d9564be76a951

Lembrando que tô tentando mas não tenho certeza do que estou fazendo. Tô aprendendo ...

Adeilson souza da silva

unread,
Oct 18, 2014, 1:02:05 PM10/18/14
to python...@googlegroups.com
Geovani, vc viu meu código?

Marcelo Elias Del Valle

unread,
Oct 18, 2014, 1:09:11 PM10/18/14
to python...@googlegroups.com
Adeilson, 

Foi gerado por quem? Se a intenção era gerar um json, acredito que o erro já está na hora da GERAÇÃO do arquivo, não na leitura. 
Você até consegue ler esse arquivo, mas o ideal era ler json. 

O que exatamente você quer fazer?

Abraços,
Marcelo.


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Adeilson souza da silva

unread,
Oct 18, 2014, 1:31:42 PM10/18/14
to python...@googlegroups.com
Fui eu quem gravei esses arquivo, mas acho que fiz de forma errada, mas preciso desses dados. Eu quero poder gerar tipo uma base onde eu possa acessar os campos:valores, como user, id etc.

Marcelo Elias Del Valle

unread,
Oct 18, 2014, 1:47:20 PM10/18/14
to python...@googlegroups.com
Adeilson, 

Suponha que você tenha um dict:
my_dict_var

Você pode obter uma string json com o comando:
json.dumps(my_dict_var)

Esse código lê o arquivo da url que você passou e imprime o mesmo em formato json: https://gist.github.com/mvallebr/8a715d7ad457debb748b

Veja se era isso o que você estava querendo. Queria te ajudar a aprender mais os conceitos, mas não entendi direito onde está sua dúvida.

Abraços,
Marcelo.

Adeilson souza da silva

unread,
Oct 18, 2014, 1:59:19 PM10/18/14
to python...@googlegroups.com
Quando eu abro meu arquivo e leio e faço json.dumps(arquivo)  ou json.ĺodas(arquivo) dá os erros que eu listei no começo do tópico.

Estou fazendo assim:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
 
import json
 
arq = open('umalinhatweets.txt')
print type(arq)
data_load = json.loads(arq.read())
print type(data_load)
print data_load.keys()

Erros: not serializable json, TypeError: string indices must be integers, TypeError: is not JSON serializable ou

ValueError: Expecting property name: line 1 column 1 (char 1)

Marcelo Elias Del Valle

unread,
Oct 18, 2014, 2:05:06 PM10/18/14
to python...@googlegroups.com
Adeilson, 

Você chegou a ler e rodar o código que te passei?

No erro que você obteve, mostrou um stack trace, não mostrou?

Deveria mostrar algo assim:

Traceback (most recent call last):
  File "/home/mvalle/Dropbox/CV/homeworks/bloomberg/TestesPy/src-dummy/json_example001.py", line 17, in <module>
    my_dict_var = json.loads(file_text)
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 365, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)

Perceba que nesse stack trace, ele mostra a linha do seu código que ocasionou o erro. Não ignore isso, essa informação é muito importante.

Você consegue reproduzir isso com o código que eu te mandei, alterando a seguinte linha:

#my_dict_var = eval(file_text)
my_dict_var = json.loads(file_text)

O problema no seu código, como eu disse, está no json.loads e não no json.dumps. É por isso que você tem esse erro. 

Abraços,
Marcelo.

Adeilson souza da silva

unread,
Oct 18, 2014, 3:16:47 PM10/18/14
to python...@googlegroups.com
Oi Marcelo. Testei e funcionou sim. Exatamente o caminho do que estou precisando, vou continuar testando outras coisas  e avançar nos estudos.
Muito obrigado pela ajuda e atenção. Um abrç!! Muito obrigado mesmo!!!
Reply all
Reply to author
Forward
0 new messages