Эта статья была впервые опубликована вЗнай почти
Мы часто используем файлы json для хранения данных.Перед записью в файл мы обычно используемjson.dumps
Функция преобразует объект Python в строку и записывает ее в файл. ноstr
Функции также могут преобразовывать словари, списки и т. д. в строки, поэтому мы не можем писать json-файлы.import json
, использовать напрямуюstr
сделать это? Ответ невозможен.
Давайте рассмотрим несколько примеров
>>> import json
>>> str([1,2])
'[1, 2]'
>>> str([1, 2])
'[1, 2]'
>>> json.dumps([1,2])
'[1, 2]'
>>> json.dumps([1, 2])
'[1, 2]'
>>> json.dumps([1, 2]) == str([1, 2])
True
Как видно из приведенного выше примера
-
str
а такжеjson.dumps
Ни один из них не выведет то, что мы ввели, как есть, и автоматически добавит только один пробел после запятой в списке. - существует
[1, 2]
В этом примере оба одинаковы
Давайте рассмотрим несколько разных примеров 1. Цитаты
>>> str(['a', 'b'])
"['a', 'b']"
>>> json.dumps(['a', 'b'])
'["a", "b"]'
>>> json.dumps(['a', 'b']) == str(['a', 'b'])
False
>>> str({'a': 1})
"{'a': 1}"
>>> json.dumps({'a': 1})
'{"a": 1}'
>>> json.dumps({'a': 1}) == str({'a': 1})
False
str
В преобразованной строке кавычки — это одинарные кавычки, аjson.dumps
двойные кавычки, что верно как в словарях, так и в списках
2. Булево (True False
)
>>> str([True, False])
'[True, False]'
>>> json.dumps([True, False])
'[true, false]'
>>> json.dumps([True, False]) == str([True, False])
False
str
В преобразованной строкеTrue
пишется с большой буквы иjson.dumps
Преобразовать все буквы в нижний регистр
3.None
>>> str([1, None])
'[1, None]'
>>> json.dumps([1, None])
'[1, null]'
>>> json.dumps([1, None]) == str([1, None])
False
str
В преобразованной строкеNone
все еще используюNone
сказал, покаjson.dumps
затем используйтеnull
Выражать.
Все мы знаем, что с помощьюjson.dumps
Цель состоит в том, чтобы преобразовать объекты Python в строки для хранения в файлах. Когда данные понадобятся позже, их нужно прочитать из файла, а затем использоватьjson.loads
Преобразовано в объект Python, аналогично следующему процессу
>>> m = ['a', 'b']
>>> n = json.dumps(m)
>>> n
'["a", "b"]'
-----存储入文件,读取文件-----
>>> p = json.loads(n)
>>> p.append('c')
>>> p
['a', 'b', 'c']
Но если мы используемstr
Преобразованная строка больше не может быть преобразована в объект Python.
>>> m = ['a', 'b']
>>> n = str(m)
>>> n
"['a', 'b']"
>>> json.loads(n)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Anaconda3\lib\json\__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "C:\Program Files\Anaconda3\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files\Anaconda3\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
то естьstr
Преобразованный формат строки не соответствует спецификации json, и преобразование между строкой формата json и объектом python не может быть завершено.
Использованная литература:
Добро пожаловать, чтобы обратить внимание на мою колонку знаний
Главная страница колонки:программирование на питоне
Каталог столбцов:содержание
Примечания к выпуску:Примечания к выпуску программного обеспечения и пакетов