Python:加载JSON对象时出错

时间:2015-03-18 01:37:24

标签: python json amazon-sqs

我试图在python中加载以下JSON字符串:

{
"Motivo_da_Venda_Perdida":"",
"Data_Visita":"2015-03-17 08:09:55",
"Cliente":{
"Distribuidor1_Modelo":"",
"RG":"",
"Distribuidor1_Marca":"Selecione",
"PlataformaMilho1_Quantidade":"",
"Telefone_Fazenda":"",
"Pulverizador1_Quantidade":"",
"Endereco_Fazenda":"",
"Nome_Fazenda":"",
"Area_Total_Fazenda":"",
"PlataformaMilho1_Marca":"Selecione",
"Trator1_Modelo":"",
"Tipo_Cultura3":"Selecione",
"Tipo_Cultura4":"Selecione",
"Cultura2_Hectares":"",
"Colheitadeira1_Quantidade":"",
"Tipo_Cultura1":"Soja",
"Tipo_Cultura2":"Selecione",
"Plantadeira1_Marca":"Stara",
"Autopropelido1_Modelo":"",
"Email_Fazenda":"",
"Autopropelido1_Marca":"Stara",
"Distribuidor1_Quantidade":"",
"PlataformaMilho1_Modelo":"",
"Trator1_Marca":"Jonh deere",
"Email":"",
"CPF":"46621644000",
"Endereco_Rua":"PAQUINHAS, S/N",
"Caixa_Postal_Fazenda":"",
"Cidade_Fazenda":"",
"Plantadeira1_Quantidade":"",
"Colheitadeira1_Marca":"New holland",
"Data_Nascimento":"2015-02-20",
"Cultura4_Hectares":"",
"Nome_Cliente":"MILTON CASTIONE",
"Cep_Fazenda":"",
"Telefone":"5491290687",
"Cultura3_Hectares":"",
"Trator1_Quantidade":"",
"Cultura1_Hectares":"",
"Autopropelido1_Quantidade":"",
"Pulverizador1_Modelo":"",
"Caixa_Postal":"",
"Estado":"RS",
"Endereco_Numero":"",
"Cidade":"COLORADO",
"Colheitadeira1_Modelo":"",
"Pulverizador1_Marca":"Selecione",
"CEP":"99460000",
"Inscricao_Estadual":"0",
"Plantadeira1_Modelo":"",
"Estado_Fazenda":"RS",
"Bairro":""
},
"Quilometragem":"00",
"Modelo_Pretendido":"Selecione",
"Quantidade_Prevista_Aquisicao":"",
"Id_Revenda":"1",
"Contato":"05491290687",
"Pendencia_Para_Proxima_Visita":"",
"Data_Proxima_Visita":"2015-04-17 08:09:55",
"Valor_de_Venda":"",
"Maquina_Usada":"0",
"Id_Vendedor":"2",
"Propensao_Compra":"Propensao_Compra_Frio",
"Comentarios":"despertar compra",
"Sistema_Compra":"Sistema_Compra_Finame",
"Outro_Produto":"",
"Data_Prevista_Aquisicao":"2015-04-17 08:09:55",
"Objetivo_Visita":"Despertar_Interesse",
"Tipo_Contato":"Telefonico"}

但是当我尝试加载它时出现以下错误

File "python_file.py", line 107, in busca_proxima_mensagem
  Visita = json.loads(corpo)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
  return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
  raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 2 - line 6 column 84 (char 1 - 1020)

但根据这个网站,这个JSON似乎是有效的:http://jsonformatter.curiousconcept.com/我做错了什么?为什么我不能将此字符串作为JSON对象加载?

我尝试从AWS SQS加载字符串,如下所示:

import json
...
result = fila.get_messages(1, 30, 'SentTimestamp')
for message in result:
    corpo = message.get_body()
    Visita = json.loads(corpo)

好的,所以我想出了导致我出现问题的原因:有一个斜杠作为一个键的值

"Endereco_Rua":"PAQUINHAS, S/N",

但是我告诉python过滤掉它(下面的代码),但是它没有用。我怎么能删除它?可以在创建数据的原点上执行此操作,因为我无法访问用户用来填写的界面。

result = fila.get_messages(1, 30, 'SentTimestamp')
for message in result:
    corpo = message.get_body()
    corpo = corpo.replace("/", "") #Filtering slashes
    Visita = json.loads(corpo)

1 个答案:

答案 0 :(得分:0)

找到解决方案!除了斜线外,有时这个错误也是在没有明显原因的情况下发生的。通过在我的python代码中添加以下行来结束解决这个问题:

1)在我的代码开头,以及其他python导入

from boto.sqs.message import RawMessage

2)更改我的SQS队列以使用/获取原始数据:

fila = sqs_conn.get_queue(constantes.fila_SQS)
fila.set_message_class(RawMessage)

希望这有助于任何遇到同样问题的人。