无法以json dict的形式获得输出

时间:2013-11-25 10:35:10

标签: python django json

我使用以下代码将输出作为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 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:0)

您正在将用户的输入转换为字符串。它不是字典;它是一个以{开头并以}结尾的字符串。

在将其转换为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}'

答案 2 :(得分:0)

输入=“{'a':1,'b':2}”

import ast
ast.literal_eval(Input)

OR

eval(Input)

它适用于你...... :)

输出 - :{'a':1,'b':2}