Разница между объектом словаря python и тем, что возвращает json.loads - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть вопрос о разнице между простым словарным объектом Python и тем, что возвращается как вывод json.loads (str).Согласно проверке type () для обоих объектов, он говорит dict.Но я хочу подтвердить это, если json.load () на самом деле возвращает обычный dict или объект json в формате словаря.Мой код такой, как показано ниже:

import json
my_dict={'key1': 'val1', 'key2': 'val2'}
my_json_string = json.dumps(my_dict)
resp_json=json.loads(my_json_string)
print(type(my_dict))
print(type(resp_json))

Вывод говорит: класс 'dict' для обоих

Но, как уже упоминалось, я хочу подтвердить, что оба они - одно и то же, потому что мне нужноотправить ответ в формате JSON, и если оба они в точности совпадают, не имеет смысла сначала преобразовать его в строку с помощью json.dumps (), а затем снова выполнить с ним json.loads ().С таким же успехом я могу вернуть созданный мной объект словаря my_dict.Надеюсь, мой вопрос понятен.

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Оба будут иметь тип dict, но они не являются одним и тем же словарем и не обязательно точно равны.

Например, json будет содержать строки Unicode.В python 2 my_dict не будет (это будет тип str).в этом случае my_dict['key1'] не совсем то же самое, что и resp_json['key1'].

В целом, для большинства вещей, питонов, это различие не должно иметь значения, и вы можете считать их одинаковыми.Тем не менее, важно помнить о возможных различиях и учитывать, имеете ли вы дело с крайним случаем, где это имеет значение.

0 голосов
/ 03 декабря 2018

Предпочтительный способ проверки / проверки типа объекта python: isintance()

isinstance(resp_json, type(my_dict))

Я подозреваю, однако, что это неправильное представление здесь другое.

Как я указал в моемcomment, json.loads() возвращает словарь, если передана строка, представляющая синтаксически правильный JSON.Поэтому тип dict является правильным, поскольку он построен на языке Python для представления информации о ключе-значении аналогично тому, как это делает JS / JSON.

Если вы хотите узнать, являются ли они одним и тем же объектом, то есть хранятся в одном и том же месте в памяти, вы можете использовать

  resp_json is my_dict

Судя по вашему вопросу, однако я подозреваю, что чтоВы действительно заинтересованы, эквивалентность содержания.

resp_json == mydict 

должен дать вам это.Я не могу представить себе другой сценарий, который имел бы значение.

0 голосов
/ 03 декабря 2018

json-модуль использует эту таблицу преобразования

https://docs.python.org/2/library/json.html#json-to-py-table

+---------------+-----------+
|     JSON      |  Python   |
+---------------+-----------+
| object        | dict      |
| array         | list      |
| string        | unicode   |
| number (int)  | int, long |
| number (real) | float     |
| true          | True      |
| false         | False     |
| null          | None      |
+---------------+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...