Выходная сортировка JSON в Python

У меня есть проблема с 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?

57
задан Vini.g.fer 1 August 2016 в 16:30
поделиться

3 ответа

Вы сохраняете свои значения в Python dict , который вообще не имеет никакого внутреннего понятия упорядочивания, это просто ключ => карта значений. Таким образом, ваши товары теряют всякий порядок, когда вы помещаете их в переменную "values".

Фактически, единственный способ получить детерминированный порядок - использовать "sort_keys = True", который, как я предполагаю, размещает их в алфавитно-цифровом порядке. Почему так важен порядок?

53
ответ дан 24 November 2019 в 19:15
поделиться

Ключи не отсортированы: "profile", "enc_key", "request", "format".

Похоже, вы хотите, чтобы они отображались в том же порядке, в котором вы создали их в словаре, но словари по своей природе несортированные, они не запоминают порядок, в котором вы вставляли ключи.

Существует несколько реализаций SortedDict, которые вы можете использовать, но кодер json не будет знать, как использовать его, чтобы получить ключи в нужном вам порядке.

4
ответ дан 24 November 2019 в 19:15
поделиться

Если вы укажете 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}'
6
ответ дан 24 November 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: