একটি খালি JSON অবজেক্ট তৈরি করতে আমি সাধারণত ব্যবহার করি:
json_encode((object) null);
কোনও বস্তুর কাছে নাল কাস্টিং কাজ করে, তবে এই সমাধানের সাথে অন্য কোনও পছন্দসই উপায় এবং / বা কোনও সমস্যা আছে কি?
একটি খালি JSON অবজেক্ট তৈরি করতে আমি সাধারণত ব্যবহার করি:
json_encode((object) null);
কোনও বস্তুর কাছে নাল কাস্টিং কাজ করে, তবে এই সমাধানের সাথে অন্য কোনও পছন্দসই উপায় এবং / বা কোনও সমস্যা আছে কি?
json_encode()
একটি স্ট্রিং দেয়, কোনও বস্তু নয় not কেন এমন করবেন? আমি কি এখানে কিছু মিস করছি?
উত্তর:
ডকুমেন্টেশনটি নির্দিষ্ট করে যে (object) null
কোনও শূন্য বস্তুর ফলস্বরূপ ঘটবে, কেউ কেউ এরপরে বলতে পারেন যে আপনার কোডটি বৈধ এবং এটি ব্যবহারের পদ্ধতি।
পিএইচপি: অবজেক্টস - ম্যানুয়াল
যদি অন্য যে কোনও ধরণের মান কোনও বস্তুতে রূপান্তরিত হয়, তবে stdClass অন্তর্নির্মিত শ্রেণির একটি নতুন উদাহরণ তৈরি করা হবে। মানটি যদি নুল হয় তবে নতুন উদাহরণটি খালি থাকবে।
যদিও উপরে কখন পরিবর্তন হবে তা আপনি কখনই জানেন না, সুতরাং আপনি যদি 100% নিশ্চিত হতে চান যে আপনি সর্বদা {}
আপনার এনকোডড ডেটাতে একটি শেষ করবেন তবে আপনি যেমন একটি হ্যাক ব্যবহার করতে পারেন:
json_encode (json_decode ("{}"));
যদিও এটি ক্লান্তিকর এবং কুৎসিত তবে আমি ধরে নিই / আশা করি যে জসন_এনকোড / জসন_ডেকোড একটি এবং অন্যের সাথে সামঞ্জস্যপূর্ণ এবং সর্বদা নীচের বিষয়গুলি সত্য বলে প্রমাণ করবে:
$a = <something>;
$a === json_decode (json_encode ($a));
json_decode ("{}")
stdClass
নীচে ব্যবহার করে এটির জন্য নিরাপদ বলে মনে করা উচিত, ডিফল্ট হিসাবে একটি ফিরিয়ে আনবে । যদিও, উল্লিখিত হিসাবে, এটি করার মতো একই জিনিস (object) null
।
json_encode (new stdClass);
আপনি যদি গতিশীল অভিধান হিসাবে বস্তুগুলি ব্যবহার করেন (এবং আমি অনুমান করি আপনি এটি করেন) তবে আমি মনে করি আপনি একটি অ্যারেঅবজেক্ট ব্যবহার করতে চান ।
এটি খালি থাকলেও এটি JSON অভিধানে মানচিত্র করে। আপনার তালিকাগুলি (অ্যারে) এবং অভিধানগুলির (এসোসিয়েটিভ অ্যারে) এর মধ্যে পার্থক্য করতে হবে তবে এটি দুর্দান্ত is
$complex = array('list' => array(), 'dict' => new ArrayObject());
print json_encode($complex); // -> {"list":[],"dict":{}}
আপনি এটি নির্বিঘ্নে হেরফের করতে পারেন (যেমন আপনি কোনও এসোসিয়েটিভ অ্যারে দিয়ে যাবেন) এবং এটি একটি অভিধানে যথাযথভাবে রেন্ডারিং করতে থাকবে:
$complex['dict']['a'] = 123;
print json_encode($complex); // -> {"list":[],"dict":{"a":123}}
unset($complex['dict']['a']);
print json_encode($complex); // -> {"list":[],"dict":{}}
আপনি এই প্রয়োজন 100% সামঞ্জস্যপূর্ণ হতে উভয় উপায়ে , এছাড়াও আপনি মোড়ানো পারেন json_decode
যাতে এটি ফেরৎ ArrayObjects
পরিবর্তেstdClass
বস্তুর (আপনাকে ফল ট্রিতে চলতে হবে এবং সমস্ত বস্তু পুনরাবৃত্তভাবে প্রতিস্থাপন করতে হবে যা মোটামুটি সহজ কাজ)।
গটছস । আমি এখনও পর্যন্ত একটি খুঁজে পেয়েছি: is_array(new ArrayObject())
মূল্যায়ন false
। আপনার is_array
সাথে উপস্থিতিগুলি সন্ধান এবং প্রতিস্থাপন করা দরকার is_iterable
।
jsonResponse = array()
এবং তারপরে এটি একটি লুপ দ্বারা গতিশীলভাবে পূরণ করা হয়েছিল। লুপটিতে যদি কোনও একক পুনরাবৃত্তি না ঘটে তবে "খালি" অবজেক্ট (বা অভিধান হিসাবে আপনি এটি কল করেন) এনকোড করা হয়েছিল []
অন্য সমস্ত কেস "{অ্যাট্র_1: মান 1, ... হিসাবে চিহ্নিত হয়ে গেছে এবং ...} ... জসন . All the other answers around here have a flaw. They assume that one already knows if the dictionary is empty or not in advance. Especially the answer that tells one should simply write
= {}` এবং json_encode মোটেও ব্যবহার করা নিরর্থক
ArrayObject
প্রয়োগগুলি iterable
, আপনি উভয়ই করতে পারেন is_iterable($foo)
পাশাপাশি iterable
প্রকারের মতো ইঙ্গিতটি ব্যবহার করতে পারেন array
, উদাহরণস্বরূপ ArrayAccess
, উদাহরণস্বরূপ নিজেকে পাস করার বিকল্পটি নিজেকে ছেড়ে দেওয়া উচিত you
ঠিক আছে, json_encode()
পিএইচপি অ্যারে / অবজেক্ট / ইত্যাদি থেকে কেবল স্ট্রিংটি দেয়। আপনি আরও কার্যকরভাবে একই প্রভাব অর্জন করতে পারেন:
$json = '{}';
এটি সম্পাদন করার জন্য কোনও ফাংশন ব্যবহার করার আসলেই কোনও লাভ নেই।
আপডেট আপনার মন্তব্য আপডেট অনুযায়ী, আপনি চেষ্টা করতে পারেন:
$test = json_encode(array('some_properties'=>new stdClass));
যদিও আমি নিশ্চিত না যে আপনি যা করছেন তার চেয়ে ভাল এটি।
json_encode($array, JSON_FORCE_OBJECT)
এটাও করবে। দেখতে https://www.php.net/manual/en/function.json-encode.php
json_encode(['a', 'b'], JSON_FORCE_OBJECT)
ফিরে আসবে{"0": "a", "1": "b"}