Json.load () এবং json.loads () ফাংশনগুলির মধ্যে পার্থক্য কী


172

পাইথনে, json.load()এবং এর মধ্যে পার্থক্য কী json.loads()?

আমি অনুমান করি যে লোড () ফাংশনটি কোনও ফাইল অবজেক্টের সাথে অবশ্যই ব্যবহার করা উচিত (আমার প্রসঙ্গে একটি প্রসঙ্গ পরিচালক ব্যবহার করা দরকার) যখন লোডগুলি () ফাংশনটি স্ট্রিং হিসাবে ফাইলের পথে নেয়। এটি কিছুটা বিভ্রান্তিকর।

" S " বর্ণটি কি স্ট্রিংয়েরjson.loads() পক্ষে দাঁড়ায় ?

আপনার উত্তরের জন্য অনেক ধন্যবাদ!


1
json.loads(s, *)- deserialize s(একটি str, bytesবা bytearrayএকটি JSON নথি সম্বলিত উদাহরণ) - docs.python.org/3.6/library/json.html
ছদ্মবেশ

উত্তর:


160

হ্যাঁ, sস্ট্রিং মানে। json.loadsফাংশন ফাইল পাথ, কিন্তু একটি স্ট্রিং হিসেবে ফাইলের বিষয়বস্তু নেয় না। ডকুমেন্টেশনটি https://docs.python.org/2/library/json.html এ দেখুন!


5
লিঙ্কযুক্ত নিবন্ধটি ভুল পাইথন সংস্করণে নির্দেশ করে। প্রশ্নটি 2.7 হিসাবে ট্যাগ করা আছে।
আরভিডিকে

@ সুফিয়ান ঘোরির উত্তরটি এই সংক্ষিপ্তটি ছাড়াও মূল বক্তব্যের উত্তম উদাহরণ দেয়।
খুশি

65

প্রত্যেকে যা ব্যাখ্যা করেছে তার মধ্যে একটি সাধারণ উদাহরণ যুক্ত করতে চলেছে,

json.load ()

json.loadনিজেই একটি ফাইলকে ডিসেরায়ালাইজ করতে পারে যেমন এটি কোনও fileবস্তুকে গ্রহণ করে , উদাহরণস্বরূপ,

# open a json file for reading and print content using json.load
with open("/xyz/json_data.json", "r") as content:
  print(json.load(content))

আউটপুট হবে,

{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

আমি যদি এর json.loadsপরিবর্তে কোনও ফাইল খোলার জন্য ব্যবহার করি ,

# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
  print(json.loads(content))

আমি এই ত্রুটি পেতে হবে:

প্রকারের ত্রুটি: প্রত্যাশিত স্ট্রিং বা বাফার

json.loads ()

json.loads() স্ট্রিংকে ডিসিরিয়ালাইজ করুন।

সুতরাং ব্যবহার করার জন্য json.loadsআমাকে read()ফাংশন ব্যবহার করে ফাইলের সামগ্রীটি পাস করতে হবে , উদাহরণস্বরূপ,

ব্যবহার content.read()সঙ্গে json.loads()ফাইল ফেরত বিষয়বস্তু,

with open("json_data.json", "r") as content:
  print(json.loads(content.read()))

আউটপুট,

{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

এর কারণ content.read()স্ট্রিং টাইপ হয়<type 'str'>

আমি যদি এর json.load()সাথে ব্যবহার করি তবে আমি content.read()ত্রুটি পেয়ে যাব,

with open("json_data.json", "r") as content:
  print(json.load(content.read()))

দেয়,

AttributeError: 'str' অবজেক্টের 'পড়ুন' এর কোনও বৈশিষ্ট্য নেই

সুতরাং, এখন আপনি json.loadফাইলটি ডিসরিয়ালে জানলেন এবং json.loadsএকটি স্ট্রিং ডিসরিয়ালাইজ করুন ।

আরেকটি উদাহরণ,

sys.stdinরিটার্ন fileঅবজেক্ট, তাই আমি যদি করি তবে আমি print(json.load(sys.stdin))আসল জসন ডেটা পাব

cat json_data.json | ./test.py

{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

আমি যদি ব্যবহার json.loads()করতে চাই তবে আমি তার print(json.loads(sys.stdin.read()))পরিবর্তে করব।


4
সেরা (বিস্তারিত) উত্তর। (সংক্ষিপ্ত) গৃহীত উত্তরের সাথে আপ-ভোট দেওয়া উচিত। একসাথে তারা শক্তিশালী :-)
খুশিতে

পাইথন ৩.6.৫ সহ সবেমাত্র এফওয়াইআই with open()এবং json.loads()একটি ব্যতিক্রম প্রত্যাবর্তন করে:TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'
সের্গেই কোলোডিয়াজহনি

30

ডকুমেন্টেশন পুরোপুরি পরিষ্কার: https://docs.python.org/2/library/json.html

json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

এই রূপান্তর টেবিলটি ব্যবহার করে পাইথন অবজেক্টে fp (a .read () - JSON ডকুমেন্ট সম্বলিত ফাইল-জাতীয় বস্তু সমর্থন করে) ডেসরিয়ালাইজ করুন।

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

এই রূপান্তর টেবিলটি ব্যবহার করে পাইথন অবজেক্টে s (একটি স্ট্রিং বা ইউনিকোড উদাহরণ যেমন একটি JSON ডকুমেন্ট রয়েছে) ডিসরিয়ালাইজ করুন।

সুতরাং loadএকটি ফাইলের loadsজন্য, একটিstring


1
"ফাইলের মতো বস্তু" বনাম "একটি স্ট্রিং / ইউনিকোড উদাহরণ"। বুঝতে পারছি না কি পরিষ্কার?
আরভিডিকে

7

দ্রুত উত্তর (খুব সরলীকৃত!)

json.load () একটি ফাইল নেয়

json.load () একটি ফাইল (ফাইল অবজেক্ট) প্রত্যাশা করে - উদাহরণস্বরূপ ফাইলপ্যাথের মাধ্যমে দেওয়ার আগে কোনও ফাইল আপনি খোলেন 'files/example.json'


json.loads () একটি STRING নেয়

json.loads () একটি (বৈধ) JSON স্ট্রিং প্রত্যাশা করে - যেমন {"foo": "bar"}


উদাহরণ

ধরে নিচ্ছি আপনার কাছে একটি ফাইল উদাহরণ রয়েছে। এই বিষয়বস্তু সহ জসন: {"কী_1": 1, "কী_2": "ফু", "কী_3": নাল}

>>> import json
>>> file = open("example.json")

>>> type(file)
<class '_io.TextIOWrapper'>

>>> file
<_io.TextIOWrapper name='example.json' mode='r' encoding='UTF-8'>

>>> json.load(file)
{'key_1': 1, 'key_2': 'foo', 'Key_3': None}

>>> json.loads(file)
Traceback (most recent call last):
  File "/usr/local/python/Versions/3.7/lib/python3.7/json/__init__.py", line 341, in loads
TypeError: the JSON object must be str, bytes or bytearray, not TextIOWrapper


>>> string = '{"foo": "bar"}'

>>> type(string)
<class 'str'>

>>> string
'{"foo": "bar"}'

>>> json.loads(string)
{'foo': 'bar'}

>>> json.load(string)
Traceback (most recent call last):
  File "/usr/local/python/Versions/3.7/lib/python3.7/json/__init__.py", line 293, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

টিউটোরিয়াল সম্পর্কে json.dump/ dumps& json.load/ loads bogotobogo.com/python/...
wlad

1

Json.load () পদ্ধতি (ছাড়া "গুলি" "লোড") একটি ফাইল সরাসরি পড়তে পারেন:

import json
with open('strings.json') as f:
    d = json.load(f)
    print(d)

json.loads () পদ্ধতি, যা কেবল স্ট্রিং আর্গুমেন্টের জন্য ব্যবহৃত হয় ।

import json

person = '{"name": "Bob", "languages": ["English", "Fench"]}'
print(type(person))
# Output : <type 'str'>

person_dict = json.loads(person)
print( person_dict)
# Output: {'name': 'Bob', 'languages': ['English', 'Fench']}

print(type(person_dict))
# Output : <type 'dict'>

এখানে, আমরা বোঝাতে পারি () একটি ইনপুট এবং রিটার্ন অভিধান হিসাবে স্ট্রিং (টাইপ (স্ট্র)) নেওয়ার পরে দেখতে পাচ্ছি ।


0

পাইথন ৩..7..7 এ, সিপাইথন উত্স কোড অনুসারে json.load এর সংজ্ঞা নীচে রয়েছে :

def load(fp, *, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):

    return loads(fp.read(),
        cls=cls, object_hook=object_hook,
        parse_float=parse_float, parse_int=parse_int,
        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)

json.load আসলে json.loads কল করে এবং fp.read()প্রথম আর্গুমেন্ট হিসাবে ব্যবহার করুন ।

সুতরাং যদি আপনার কোড হয়:

with open (file) as fp:
    s = fp.read()
    json.loads(s)

এটি করার জন্য এটি একই:

with open (file) as fp:
    json.load(fp)

তবে আপনার যদি ফাইলটি যেমন বাইট পড়ার মতো নির্দিষ্ট করতে হয় fp.read(10)বা স্ট্রিং / বাইটগুলি আপনি ডিসরিয়ালাইজ করতে চান তা ফাইল থেকে নয়, আপনার json.loads ব্যবহার করা উচিত ()

Json.loads () হিসাবে, এটি কেবল স্ট্রিংকেই নয়, বাইটগুলিও ডিসরিয়ালাইজ করে। যদি sবাইট বা বাইটারি হয় তবে এটি প্রথমে স্ট্রিংকে ডিকোড করা হবে। আপনি এটি সোর্স কোডেও খুঁজে পেতে পারেন।

def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
    containing a JSON document) to a Python object.

    ...

    """
    if isinstance(s, str):
        if s.startswith('\ufeff'):
            raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
                                  s, 0)
    else:
        if not isinstance(s, (bytes, bytearray)):
            raise TypeError(f'the JSON object must be str, bytes or bytearray, '
                            f'not {s.__class__.__name__}')
        s = s.decode(detect_encoding(s), 'surrogatepass')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.