У меня есть проблема с JSON в Python.
На самом деле, если я пытаюсь выполнить этот код, Python дает мне отсортированную строку JSON!
Например:
values = {'profile' : 'testprofile',
'format': 'RSA_RC4_Sealed',
'enc_key' : base64.b64encode(chiave_da_inviare),
'request' : base64.b64encode(data)
}
values_json = json.dumps(values, sort_keys=False, separators=(',', ':'))
и это - вывод:
{"profile":"testprofile","enc_key":"GBWo[...]NV6w==","request":"TFl[...]uYw==","format":"RSA_RC4_Sealed"}
Как Вы видите, я пытался использовать "sort_keys=False", но ничто не изменилось.
Как я могу остановить Python, сортирующий мои строки JSON?
Вы сохраняете свои значения в Python dict , который вообще не имеет никакого внутреннего понятия упорядочивания, это просто ключ => карта значений. Таким образом, ваши товары теряют всякий порядок, когда вы помещаете их в переменную "values".
Фактически, единственный способ получить детерминированный порядок - использовать "sort_keys = True", который, как я предполагаю, размещает их в алфавитно-цифровом порядке. Почему так важен порядок?
Ключи не отсортированы: "profile", "enc_key", "request", "format".
Похоже, вы хотите, чтобы они отображались в том же порядке, в котором вы создали их в словаре, но словари по своей природе несортированные, они не запоминают порядок, в котором вы вставляли ключи.
Существует несколько реализаций SortedDict, которые вы можете использовать, но кодер json не будет знать, как использовать его, чтобы получить ключи в нужном вам порядке.
Если вы укажете sort_keys = False
, то Python просто распечатает элементы в том порядке, в котором они появляются. базовый объект Python dict. В некоторых случаях это может совпадать с алфавитно-цифровым порядком сортировки по умолчанию. В вашем примере ключи даже НЕ сортируются таким образом, поскольку «формат» идет после «запроса». Несмотря на это, параметр sort_keys
по-прежнему действителен, о чем свидетельствует этот пример кода:
>>> import json
>>> json.dumps({"a":5, "b":6, "c":7}, sort_keys=False)
'{"a": 5, "c": 7, "b": 6}'