No momento, meu projeto está recebendo uma mensagem JSON em python, da qual preciso extrair bits de informações. Para isso, vamos configurá-lo para um JSON simples em uma string:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
Até agora, tenho gerado solicitações JSON usando uma lista e json.dumps
, em seguida , mas para fazer o oposto disso, acho que preciso usar json.loads
. No entanto, não tive muita sorte com isso. Alguém poderia me fornecer um trecho que retornaria "2"
com a entrada do "two"
exemplo acima?
'
delimitadores de string de aspas simples, você pode ter acidentalmente criado representações de strings para dicionários Python. JSON sempre usará"
delimitadores . Em caso afirmativo, repare o código que produz essa saída para usar emjson.dumps()
vez destr()
ourepr()
e vá para Converter uma representação String de um Dicionário em um dicionário? para descobrir como recuperar seus dados Python. Outras pistas você tem um literal Python? ProcureNone
,True
ouFalse
, o JSON usarianull
,true
&false
.'
delimitadores de string de aspas simples), também podem dar uma olhada aqui: stackoverflow.com/questions/41168558/…Respostas:
Muito simples:
fonte
import simplejson as json
. Esqueci de mencionar mas graças :).load
método em vez de.loads
Às vezes, o seu json não é uma string. Por exemplo, se você estiver recebendo um json de um URL como este:
você precisará usar o json.load, não o json.loads:
(é fácil esquecer: o 's' é para 'string')
fonte
Para URL ou arquivo, use
json.load()
. Para string com conteúdo .json, usejson.loads()
.fonte
A seguir, é apresentado um exemplo simples que pode ajudá-lo:
A saída para o código acima será:
Observe que você pode definir o argumento ident do dump para imprimi-lo da seguinte maneira (por exemplo, ao usar print json.dumps (data, indent = 4)):
fonte
Pode usar os módulos json ou ast python:
fonte
ast.literal_eval()
função para JSON, porque além de seus exemplos de texto e-inteiro somente triviais que você vai ter problemas. JSON não é Python . Só porque alguns JSON podem ser analisadosast.literal_eval()
não torna essa uma abordagem adequada.r'{"foo": null, "bar": true, "baz": "\ud83e\udd26"}'
usandoast.literal_eval()
, porque contém nulos, um valor booleano e um único ponto de código não-BMP. JSON representa esses valores de maneira diferente de como os literais Python os representariam.json.loads()
por outro lado, não tem problemas com que a entrada correta e decodifica que a{'foo': None, 'bar': True, 'baz': '🤦'}
.ast.literal_eval()
é um pouco mais lento e não pode ser personalizado. Você nunca deve usá-lo para decodificar JSON .