Kubernetes Python客户端从代理动词返回pod的JSON HTTP响应,作为带单引号而不是双引号的字符串

问题描述 投票:0回答:1

我通过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的任何建议?

json kubernetes proxy kubernetes-python-client
1个回答
1
投票

在阅读了Kubernetes Python客户端的一些代码之后,现在很清楚,connect_get_namespaced_pod_proxy()connect_get_namespaced_pod_proxy_with_path()通过调用strself.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)
© www.soinside.com 2019 - 2024. All rights reserved.