2013-11-25 2 views
0

다음 코드로 json 문자열로 출력됩니다. 하지만 JSON dict로 앞뒤에 따옴표없이 필요합니다. 어떻게해야합니까?출력을 json dict로 가져올 수 없습니다.

원시 입력이 아닌 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} 
+1

게시 한 코드로는 아무 것도 인쇄되지 않습니다. 실제 작업 코드와 출력을 게시 할 수 있습니까? –

+0

분명히 원하는 출력이 유효한 JSON이 아닙니다. JSON은 작은 따옴표가 아닌 키 주위에 큰 따옴표가 있어야합니다. –

답변

1

raw_input()는 파이썬 사전입니다 inp에서 완전히 다른 개체를 나타내는 문자열을 반환합니다.

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

또는 파이썬 문자 표현으로 구문 분석 :

from ast import literal_eval 

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

당신은으로 사용자의 입력을 변환하는

당신이 raw_input을 원한다면

먼저 등을 분석, JSON으로 처리합니다 문자열. 사전이 아닙니다. {으로 시작하고 }으로 끝나는 문자열입니다.

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}' 
0

입력 = "{ 'A': 1, B는 2}"

import ast 
ast.literal_eval(Input) 

또는

eval(Input) 

그것은 : ... 당신을 위해

작동합니다

출력 - { 'a': 1, 'b': 2}

관련 문제