json.dumps বনাম flask.jsonify


276

আমি নিশ্চিত না যে আমি flask.jsonifyপদ্ধতির উদ্দেশ্যটি বুঝতে পেরেছি । আমি এটি থেকে একটি জেএসএন স্ট্রিং তৈরি করার চেষ্টা করি:

data = {"id": str(album.id), "title": album.title}

তবে আমি যা পাই তা json.dumpsথেকে যা পাই তা থেকে আলাদা flask.jsonify

json.dumps(data): [{"id": "4ea856fd6506ae0db42702dd", "title": "Business"}]
flask.jsonify(data): {"id":…, "title":…}

একথাও ঠিক যে আমি যে কেমন লাগে আর কি মত ফলে পেতে প্রয়োজন json.dumpsআয়। আমি কি ভুল করছি?

উত্তর:


369

jsonify()বোতল ফাংশন একটি ফেরৎ flask.Response()বস্তুর ইতিমধ্যে উপযুক্ত সামগ্রী-প্রকার হেডার আছে JSON প্রতিক্রিয়া সাথে ব্যবহারের জন্য 'আবেদন / JSON'। অন্যদিকে, json.dumps()পদ্ধতিটি কেবল একটি এনকোডযুক্ত স্ট্রিং ফিরিয়ে দেবে, যার জন্য মাইমালি টাইপ শিরোনামের মাইমুয়াল যোগ করতে হবে।

সম্পূর্ণ রেফারেন্সের জন্য এখানেjsonify() ফাংশন সম্পর্কে আরও দেখুন ।

সম্পাদনা: এছাড়াও, আমি লক্ষ্য করেছি যে jsonify()কাওয়ার্গস বা অভিধানগুলি পরিচালনা করে, পাশাপাশি json.dumps()তালিকাগুলি এবং অন্যদের সমর্থন করে।


31
jsonify()তালিকাগুলি এখন পরিচালনা করে। এই প্রতিশ্রুতি দেখুন ।
জেফ উইডম্যান

3
তবে এটি এখনও এসকিউএএএইচএলএলচেমি অবজেক্ট এবং তালিকাকে জেএসএনে রূপান্তরিত করে না।
আজব্রাস

91

আপনি করতে পারেন:

flask.jsonify(**data)

অথবা

flask.jsonify(id=str(album.id), title=album.title)

82

এই flask.jsonify()

def jsonify(*args, **kwargs):
    if __debug__:
        _assert_have_json()
    return current_app.response_class(json.dumps(dict(*args, **kwargs),
        indent=None if request.is_xhr else 2), mimetype='application/json')

jsonব্যবহৃত মডিউল পারেন হয় simplejsonবা jsonযাতে। current_appএটি হ'ল Flask()আপনার অ্যাপ্লিকেশন সম্পর্কিত একটি রেফারেন্স । ক্লাস response_class()একটি রেফারেন্স Response()


42

একজন বা অন্যের পছন্দ নির্ভর করে আপনি কী করতে চান on আমি যা বুঝতে পারি তা থেকে:

  • আপনি যখন কোনও এপিআই তৈরি করছেন তখন কেউ জেএসনফাই দরকারী হবে এবং তার পরিবর্তে জসনকে প্রত্যাশা করবে। উদাহরণস্বরূপ: REST গিথুব এপিআই আপনার অনুরোধের উত্তর দিতে এই পদ্ধতিটি ব্যবহার করতে পারে।

  • ডাম্পস , ডেটা / পাইথন অবজেক্টটিকে জসন-এ ফর্ম্যাট করা এবং আপনার অ্যাপ্লিকেশনের অভ্যন্তরে এটিতে কাজ করা সম্পর্কে আরও বেশি। উদাহরণস্বরূপ, আমাকে আমার প্রতিনিধিত্ব স্তরটিতে একটি বস্তু পাস করতে হবে যেখানে কিছু জাভাস্ক্রিপ্ট গ্রাফ প্রদর্শন করবে। আপনি ডাম্প দ্বারা উত্পাদিত জসন দিয়ে জাভাস্ক্রিপ্ট খাওয়াবেন।


4
আমি পার্থক্যটি মোটেই বুঝতে পারি না।
vidstige

11
@ উইডস্টিজ: জসনফাই একটি ফ্লাস্ক তৈরি করে es রেসপোনস () অবজেক্টটিকে তার শিরোলেখগুলি "সামগ্রী-ধরণের: অ্যাপ্লিকেশন / জেসন" হিসাবে সেট করেছে, এটির পে-লোড সেট রূপান্তরিত-জেএসএন-স্ট্রিং ডিক্ট হিসাবে। ডাম্পগুলি কেবল রূপান্তরিত থেকে JSON- স্ট্রিং তৈরি করে। এটি সঠিকভাবে ফর্ম্যাট করা ফ্লাস্ক নয় esউক্ত প্রতিক্রিয়া () অবজেক্ট। সুতরাং যদি আপনার দৃষ্টিভঙ্গি "রিটার্ন জসন.ডাম্পস (ডিক্ট)" বলে থাকে, তবে প্রাপক কেবল একটি নিয়মিত "কন্টেন্ট-টাইপ: টেক্সট / এইচটিএমএল" জেসসন.ডাম্পস আউটপুটটির সাথে পে-লোড হিসাবে সাড়া পাবেন।
সামেসলা

3
@ সামেসলা হ্যাঁ, আমি জানি, তবে সেই তথ্যের কোনওটিই এই উত্তরে নেই।
2

0

বিবেচনা

data={'fld':'hello'}

এখন

jsonify(data)

hello 'fld' প্রদান করবে: 'হ্যালো'। এবং

json.dumps(data)

দেয়

"<html><body><p>{'fld':'hello'}</p></body></html>"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.