Python-клиент Kubernetes возвращает ответ JSON HTTP от pod-глагола в виде строки с одинарными кавычками вместо двойных кавычек - PullRequest
0 голосов
/ 25 апреля 2019

Я запрашиваю некоторые данные JSON с веб-сервера модуля через глагол-посредник Kubernetes API.То есть:

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)

Вызов завершается успешно и возвращает str, содержащий сериализованные данные JSON из веб-службы моего модуля.К сожалению, res теперь выглядит следующим образом ... который вообще не является допустимым JSON, поэтому json.loads(res) запрещает его анализ:

{'x': [{'xx': 'xxx', ...

Как видите, строковый ответ выглядит какСловарь Python, вместо действительного JSON.Любые предложения относительно того, как это безопасно преобразовать обратно в правильный JSON или правильный Python dict?

1 Ответ

1 голос
/ 25 апреля 2019

После прочтения некоторого кода Python-клиента Kubernetes стало ясно, что connect_get_namespaced_pod_proxy() и connect_get_namespaced_pod_proxy_with_path() заставляют тело ответа от удаленного вызова API преобразовываться в str путем вызова self.api_client.call_api(..., response_type='str', ...) ( core_v1_api.py ).Итак, мы застряли с клиентом API Kubernetes, который дает нам только строковое представление dict(), представляющее исходное тело ответа JSON.

Чтобы преобразовать строку обратно в dict(), anwer для преобразования строкового представления словаря в словарь? предлагает использовать ast.literal_eval().Задаваясь вопросом, является ли это разумным путем, я нашел ответ Является ли наилучшей практикой использование библиотеки python ast для таких операций, как преобразование строки в 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)
...