В Python какая разница между json.load()
и json.loads()
?
Я предполагаю , что нагрузка () функция должна быть использована с файлом объектом (мне нужно таким образом , чтобы использовать менеджер контекста) в то время как нагрузка () функция на пути к файлу в виде строки. Это немного сбивает с толку.
Буква " s " json.loads()
означает строку ?
Большое спасибо за ваши ответы!
python
json
python-2.7
MMF
источник
источник
json.loads(s, *)
- Deserializes
(аstr
,bytes
илиbytearray
экземпляр , содержащий JSON документ) - docs.python.org/3.6/library/json.htmlОтветы:
Да,
s
обозначает строку.json.loads
Функция не принимает путь к файлу, но содержимое файла в виде строки. Посмотрите документацию по адресу https://docs.python.org/2/library/json.html !источник
Просто добавлю простой пример к тому, что все объяснили,
json.load ()
json.load
может десериализовать файл сам, т.е. он принимаетfile
объект, например,будет выводить,
Если я использую,
json.loads
чтобы открыть файл вместоЯ получил бы эту ошибку:
json.loads ()
json.loads()
десериализовать строку.Таким образом, для использования
json.loads
мне придется передать содержимое файла с помощьюread()
функции, например,использование
content.read()
сjson.loads()
возвратом содержимого файла,Вывод,
Это потому, что тип
content.read()
является строкой, т.е.<type 'str'>
Если я использую
json.load()
сcontent.read()
, я получу ошибку,дает,
Итак, теперь вы знаете
json.load
файлjson.loads
десериализации и десериализацию строки.Другой пример,
sys.stdin
вернутьfile
объект, так что если я это сделаюprint(json.load(sys.stdin))
, я получу фактические данные JSON,Если я хочу использовать
json.loads()
, я бы сделалprint(json.loads(sys.stdin.read()))
вместо этого.источник
with open()
иjson.loads()
возвращает исключение:TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'
Документация достаточно ясна: https://docs.python.org/2/library/json.html
Так
load
что для файла,loads
дляstring
источник
БЫСТРЫЙ ОТВЕТ (очень упрощенно!)
ПРИМЕРЫ
источник
json.dump
/dumps
&json.load
/loads
bogotobogo.com/python/…Метод json.load () (без «s» в «load») может читать файл напрямую:
Метод json.loads () , который используется только для строковых аргументов.
Здесь мы можем видеть, что после использования load () принимает строку (тип (str)) в качестве словаря ввода и возврата .
источник
В python3.7.7 определение json.load выглядит следующим образом в соответствии с исходным кодом cpython :
json.load фактически вызывает json.loads и использует
fp.read()
в качестве первого аргумента.Так что, если ваш код:
Это то же самое, чтобы сделать это:
Но если вам нужно указать байты, считываемые из файла, как и
fp.read(10)
если строка или байты, которые вы хотите десериализовать, не из файла, вы должны использовать json.loads ()Что касается json.loads (), он десериализует не только строку, но и байты. Если
s
это байты или bytearray, он будет сначала декодирован в строку. Вы также можете найти его в исходном коде.источник