Разница между str и json.dumps

задняя часть Python JSON

Эта статья была впервые опубликована вЗнай почти

Мы часто используем файлы 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 не может быть завершено.

Использованная литература:

strа такжеjson.dumpsразница

Добро пожаловать, чтобы обратить внимание на мою колонку знаний

Главная страница колонки:программирование на питоне

Каталог столбцов:содержание

Примечания к выпуску:Примечания к выпуску программного обеспечения и пакетов