Par de chaves de valor JSON para conter aspas duplas usando Python

Nov 04 2020

Estou tentando obter os valores-chave json usando python.

Inicialmente, tenho meu valor json em uma variável de string e, mais tarde, estou convertendo em valor de dicionário,

data='{"enc_column": "5", "Delimiter": ";"}'
pair=json.loads(data)
print (pair['Delimiter'])

Result- ; (ponto e vírgula)

Mas, no meu caso, o delimitador que espero é ";" (ponto e vírgula entre aspas duplas) Então, tentei o seguinte,

data='{"enc_column": "5", "Delimiter": '";"'}'
pair=json.loads(data)

Mas obtendo o erro abaixo,

Alguém pode sugerir obter o resultado do delimitador como ";" em vez de apenas; usando Python

Não estou esperando juntar as aspas duplas depois que o ponto-e-vírgula for retornado sozinho.

Respostas

2 hek2mgl Nov 04 2020 at 15:35

Você precisa escapar da barra invertida no json e as aspas simples não são permitidas no json :

import json
data='{"enc_column": "5", "Delimiter": "\\";\\""}'
pair=json.loads(data)
print (pair['Delimiter'])

PS: Normalmente você não escreveria seu json manualmente, mas seria impresso por algum outro componente, como outro script python, por exemplo. Nesse caso, o escape das aspas duplas seria feito pelo serializador json:

import json
data = {'delimiter': '";"'}
print(json.dumps(data))

Resultado:

{"delimiter": "\";\""}

Se você pegar essa string e colocá-la em um script Python:

string = '{"delimiter": "\";\""}'
print(string)

Resultado:

{"delimiter": "";""}

você verá que precisa escapar do \para evitar que seja interpretado (e, portanto, consumido) pelo Python:

string = '{"delimiter": "\\";\\""}'
print(string)

Resultado (conforme necessário):

{"delimiter": "\";\""}
1 Metabolic Nov 04 2020 at 15:47

Você precisa usar uma barra invertida \\dupla para escapar as aspas duplas "em JSON:

Uma versão com escape de seu JSON avaliada em JS está no snippet abaixo. O valor devolvido é";"

data='{"enc_column": "5", "Delimiter": "\\";\\""}'
pair=JSON.parse(data)
console.log((pair['Delimiter']))