我通过Kubernetes API代理动词从pod的Web服务器请求一些JSON数据。那是:
corev1 = kubernetes.client.CoreV1Api()
res = corev1.connect_get_namespaced_pod_proxy_with_path(
'mypod:5000', 'default', path='somepath', path2='somepath')
print(type(res))
print(res)
调用成功并返回包含来自我的pod的Web服务的序列化JSON数据的str
。不幸的是,res
现在看起来像这样......根本不是有效的JSON,所以json.loads(res)
否认要解析它:
{'x': [{'xx': 'xxx', ...
如您所见,字符串化响应看起来像Python字典,而不是有效的JSON。有关如何安全地转换回正确的JSON或正确的Python dict
的任何建议?
在阅读了Kubernetes Python客户端的一些代码之后,现在很清楚,connect_get_namespaced_pod_proxy()
和connect_get_namespaced_pod_proxy_with_path()
通过调用str
(self.api_client.call_api(..., response_type='str', ...)
)强制远程API调用的响应体转换为core_v1_api.py。所以,我们坚持使用Kubernetes API客户端,只给我们代表原始JSON响应体的dict()
的字符串表示。
要将字符串转换回dict()
,anwer to Convert a String representation of a Dictionary to a dictionary?建议使用ast.literal_eval()
。想知道这是否是一条合理的路线,我发现answer to Is it a best practice to use python ast library for operations like converting string to dict说这是明智之举。
import ast
corev1 = kubernetes.client.CoreV1Api()
res = corev1.connect_get_namespaced_pod_proxy_with_path(
'mypod:5000', 'default', path='somepath', path2='somepath')
json_res = ast.literal_eval(res)