Как добавить мои данные для запуска объекта JSON с помощью Python - PullRequest
0 голосов
/ 21 марта 2019

У меня есть файл json со следующим кодом

"destinations": [
     {
        "/abc/def": {

  "proxy_pass":"https://{{application_destination}}/abc/service$is_args$args",
            "host": "{{application_destination}}",

            }
        }
]

Я должен добавить URL-адрес proxy_pass к некоторой переменной, а затем добавить эту переменную в proxy_pass с использованием кода Python

if "proxy_pass" in location_details:
            proxy_pass = location_details[proxy_pass]
            location_details["set"] = "$backend " + proxy_pass
            location_details["proxy_pass"] = "$backend"

Но вывод, который я получаю после proxy_pass, установленное значение печатает Итак, как добавить заданное значение в начало объекта json, используя python

1 Ответ

0 голосов
/ 21 марта 2019

Python dict объекты не упорядочены до Python 3.7

Вы можете использовать OrderedDict:

from collections import OrderedDict
import json


location_details = OrderedDict({
    "proxy_pass": "https://{{application_destination}}/abc/service$is_args$args",
    "host": "{{application_destination}}",
})

if "proxy_pass" in location_details:
    proxy_pass = location_details.pop('proxy_pass')
    location_details["set"] = "$backend " + proxy_pass
    location_details["proxy_pass"] = "$backend"

print(json.dumps(location_details, indent=4))

Выход

{
    "host": "{{application_destination}}", 
    "set": "$backend https://{{application_destination}}/abc/service$is_args$args", 
    "proxy_pass": "$backend"
}

РЕДАКТИРОВАТЬ

Для получения необходимого заказа

  1. set
  2. proxy_pass
  3. host

Вы можете использовать OrderedDict.move_to_end, чтобы переместить клавишу host в конец OrderedDict:

from collections import OrderedDict
import json


location_details = OrderedDict({
    "proxy_pass": "https://{{application_destination}}/abc/service$is_args$args",
    "host": "{{application_destination}}",
})

if "proxy_pass" in location_details:
    proxy_pass = location_details.pop('proxy_pass')
    location_details["set"] = "$backend " + proxy_pass
    location_details["proxy_pass"] = "$backend"
    location_details.move_to_end('host')

print(json.dumps(location_details, indent=4))

Выход

{
    "set": "$backend https://{{application_destination}}/abc/service$is_args$args",
    "proxy_pass": "$backend",
    "host": "{{application_destination}}"
}

Примечание

Вы также можете использовать location_details.move_to_end(key, last=False) для перемещения key к началу словаря

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...