Как бороться с косой чертой и% 2F в Python? - PullRequest
0 голосов
/ 18 мая 2018

Давая параметры Interface=['1/1/1', '1/2/3'], tag=11, мне нужно добавить отсутствующий интерфейс к json_data[Interface] и json_data[Port], как показано ниже.Все места, кроме name значение используется '%2F' как '/'.

Входной JSON:

{
    "Interface": {
        "1%2F1%2F1": {
            "name": "1/1/1",
        }
    },
    "Port": {
        "1%2F1%2F1": {
            "interfaces": [
                "1%2F1%2F1"
            ],
            "name": "1/1/1",
            "tag": "10"
        }
    }
}

Выходной JSON должен выглядеть следующим образом:

{
    "Interface": {
        "1%2F1%2F1": {
            "name": "1/1/1",
        },
        "1%2F2%2F3": {
            "name": "1/2/3",
        }
    },
    "Port": {
        "1%2F1%2F1": {
            "interfaces": [
                "1%2F1%2F1"
            ],
            "name": "1/1/1",
            "tag": "10"
        },
        "1%2F2%2F3": {
            "interfaces": [
                "1%2F2%2F3"
            ],
            "name": "1/2/3",
            "tag": "11"
        }
    }
}

Я пытался использовать итеративный список интерфейсов:

        for item in interface:
            if item is not in json_data["Interface"].keys():
                json_data["Interface"][item] = { "name" : item }

Но вернулся в неправильном формате:

"Interface": {
        "2": {
            "name": "2"
        },
        "1": {
            "name": "1"
        },
        "'": {
            "name": "'"
        },
        " ": {
            "name": " "
        },
        ",": {
            "name": ","
        },
        "/": {
            "name": "/"
        },

1 Ответ

0 голосов
/ 18 мая 2018

Как справиться с косой чертой и% 2F

Вот простой способ преобразования из / в %2F:

'1/1/1'.replace('/', '%2F')
# Results: '1%2F1%2F1'

I 'Я не уверен, зачем вам это нужно в этом формате, но если это связано с передачей его через URL и вам нужно экранировать другие символы, вы можете использовать:

import urllib
urllib.parse.quote('1/1/1', safe='')
# Results: '1%2F1%2F1'

Ваш вывод

Похоже, вы случайно перебираете строку букв, а не список интерфейсов.Как вы назначаете переменную interface?

Ваша проверка на существующие интерфейсы

Ваше условие if item is not in json_data["Interface"].keys() не будет работать, если item прямо из вашего вводав формате 1/1/1, потому что все ключи в json_data["Interface"] используют экранированный формат.

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