json dump를 사용한 다음 json load를 동일한 데이터에 사용했습니다. 데이터는 유니 코드이므로 문자열로 변환했습니다. ast.literla_eval을 사용하여 dict에 문자열 형식을 얻으려고했지만 잘못된 형식의 문자열이 표시됩니다. JSON 부하의ast.literal_eval을 사용하는 중에 형식이 잘못된 문자열
출력 내가 뭘하려
('data', u'{\n "a": "spawning", \n "addresses": "", \n "image": "b", \n "OS-EXT-STS:vm_state": "building", \n "c:launched_at": null, \n "d": "e (fgh)", \n "user_id": "hhh", \n
"accessIPv4": "", \n "accessIPv6": "", \n "name": "kk", \n "created": "2017-12-08T07:52:44Z", \n "z:xyz": []\n}', <type 'unicode'>)
이하?
with open('openstack_list.json', 'w') as e:
json.dump(check_output(['openstack', 'server', 'show', i, '-f', 'json']), e)
with open('openstack_list.json', 'r') as a:
data = json.load(a)
new_data = data.encode('utf-8') # output type is unicode
dict_data = ast.literal_eval(new_data) # output type is string
출력이 사전이되고 싶지만 얻지 못했습니다. 또한 json로드는 유니 코드 데이터를 제공하므로 new_data = data.encode('utf-8')
은 중복됩니다. 하지만 인코딩없이 ast.literal_eval
을 사용하면 잘못된 형식의 문자열 오류가 발생합니다. 어쨌든, 데이터 유형을 사전으로 가져올 수 없습니다.
편집 :
오류 : JSON 덤프 전에
Traceback (most recent call last):
File "openstack_resource_list.py", line 84, in <module>
output = get_resources()
File "openstack_resource_list.py", line 47, in get_resources
dict_data = ast.literal_eval(new_data)
File "/usr/lib64/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib64/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/usr/lib64/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/usr/lib64/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
데이터 : 데이터가 check_output
에 의해 반환 된
"{\n \"aaa\": null, \n \"addresses\": \"inner-net=192.168.0.173, x.x.x.x\", \n \"image\": \"aaa (aaa)\",
\n \"aaa:vm_state\": \"active\", \n \"aaa:launched_at\": \"2017-12-08T08:21:45.000000\", \n \"flavor\": \"aaa4 (aaa)\",
\n \"id\": \"aaa\", \n \"security_groups\": [\n {\n \"name\": \"default\"\n }\n ], \n \"user_id\": \"aaa\",
\n \"OS-DCF:diskConfig\": \"MANUAL\", \n \"accessIPv4\": \"\", \n \"accessIPv6\": \"\", \n \"progress\": 0, \n \"Oaa:power_state\": 1, \n \"project_id\": \"aaa\",
\n \"config_drive\": \"\", \n \"status\": \"ACTIVE\", \n \"updated\": \"2017-12-08T08:21:45Z\", \n \"hostId\": \"aaa\", \n \"OS-SRV-USG:terminated_at\": null,
\n \"key_name\": \"pg_ci\", \n \"properties\": \"\", \n \"OS-EXT-AZ:availability_zone\": \"nova\", \n \"name\": \"taaa\", \n \"created\": \"2017-12-08T08:21:31Z\", \n
\"os-extended-volumes:volumes_attached\": [\n {\n \"id\": \"aaa\"\n }\n ]\n}"
'openstack_list.json'의 실제 내용을 보여줄 수 있습니까? 또한 파이썬 2를 사용하고있는 것입니다. – poke
데이터가 두 번 jsonified 된 것처럼 보입니다. check_output() 함수의 원시 반환 값 (_before_' json.dump (...))과'check_output() '전화? –
당신이 –