Python JSON Форматирование для Redis Cache - PullRequest
0 голосов
/ 29 мая 2020

Я относительно новичок в работе с JSON и пытаюсь вывести словарь на JSON, используя библиотеку json в python. У меня проблема в том, что формат очень конкретный c, и я не знаю, как подойти к нему. В частности, желаемый формат имеет дополнительные фигурные скобки и скобки. Ниже приведен пример словаря, который я конвертирую в JSON, и желаемый результат:

    #Sample Data
sample_dict = {"office":{"50":"pencil;paper",
                      "100":"stapler;eraser"},
             "warehouse":{"50":"forklift;wrench",
                         "100":"truck,screw"}}

with open('test.json', 'w') as f:
    json.dump(sample_dict, f,indent = 4)

##Output I'm able to acheive
{
    "office": {
        "50": "pencil;paper",
        "100": "stapler;eraser"
    },
    "warehouse": {
        "50": "forklift;wrench",
        "100": "truck,screw"
    }
}


##Desired Output
[{
    {"office": {
        "50": "pencil;paper",
        "100": "stapler;eraser"
    }},
    {"warehouse": {
        "50": "forklift;wrench",
        "100": "truck,screw"
    }}
}]

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Дополнительный [] будет легко - весь словарь в списке. Однако лишних {} нет; опубликованный вами образец на самом деле не является действительным JSON.

На этом этапе вам необходимо уточнить, должен ли вывод быть JSON или он должен соответствовать данному образцу.

  • Если вывод должен быть JSON, вам нужно будет получить правильный образец вывода, а затем работать оттуда. Как минимум, верхний уровень - это список словарей.

  • Если вывод должен соответствовать заданному образцу, это не JSON, и вы не будете использовать json библиотека. В зависимости от ситуации вы можете:

    • отформатировать его с форматированием Python строки (% или .format() или f"..." строк); или
    • используйте библиотеку шаблонов, например Jinja или Mako или аналогичные; или
    • , если структура данных обширна и формат согласован, напишите свою собственную библиотеку для вывода этого формата.
0 голосов
/ 29 мая 2020

Я думаю, вам нужно сделать "sample_dict" строкой с квадратными скобками.

import json

sample_dict = '[{"office":{"50":"pencil;paper", "100":"stapler;eraser"}, "warehouse":{"50":"forklift;wrench", "100":"truck,screw"}}]'

load=json.loads(sample_dict)
print(json.dumps(load, indent=4))

Output

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