Невозможно получить выход как json dict

Я получаю вывод как строку json со следующим кодом. Но я требую его в качестве JSON-диктата без ведущих и конечных котировок. Как я могу это сделать?

Кажется, это работает, если я раскомментирую line4 но не с исходным вводом.

def main(args):
 f = open(args[1], 'w')
 inp = raw_input("Enter a Dict")
 # inp = {"a":1,"b":2}
 django.utils.simplejson.dumps(inp, f)

if __name__=="__main__":
 import sys
 main(sys.argv)

выход образца я получаю:

"{'a':1,'b':2}"

вывода я хочу:

{'a':1,'b':2}
3 ответа

raw_input() возвращает строку, которая является совершенно другим объектом из inp который является Python-словарем.

Если вы хотите, чтобы raw_input рассматривался как JSON, сначала проанализируйте его как таковой:

inp = raw_input("Enter a Dict")
inp = django.utils.simplejson.loads(inp)
django.utils.simplejson.dump(inp, f)

или проанализировать его как литеральное выражение Python:

from ast import literal_eval

inp = raw_input("Enter a Dict")
inp = literal_eval(inp)
django.utils.simplejson.dump(inp, f)


Input = "{'a': 1, 'b': 2}"

import ast
ast.literal_eval(Input)

ИЛИ

eval(Input)

Это сработает для вас... :)

Вывод -: {'a': 1, 'b': 2}


Вы преобразуете пользовательский ввод в строку. Это не словарь; это строка, начинающаяся с { и заканчивается на }.

Вам нужно сначала проанализировать/оценить его как словарь, прежде чем преобразовать его в json.

>>> inp = "{'a': 1, 'b': 2}"
>>> json.dumps(inp)
'"{\'a\': 1, \'b\': 2}"'
>>> import ast
>>> d = ast.literal_eval(inp)
>>> json.dumps(d)
'{"a": 1, "b": 2}'

licensed under cc by-sa 3.0 with attribution.