json_encode / json_decode - পিএইচপি-তে অ্যারের পরিবর্তে stdClass প্রদান করে


108

এই ছোট লিপিটি পর্যবেক্ষণ করুন:

$array = array('stuff' => 'things');
print_r($array);
//prints - Array ( [stuff] => things )
$arrayEncoded = json_encode($array);
echo $arrayEncoded . "<br />";
//prints - {"stuff":"things"}
$arrayDecoded = json_decode($arrayEncoded);
print_r($arrayDecoded);
//prints - stdClass Object ( [stuff] => things )

পিএইচপি কেন JSON অবজেক্টকে ক্লাসে পরিণত করে?

json_encodedতারপরে এমন কোন অ্যারেটি কি ঠিক json_decodedএকই ফল পাওয়া উচিত নয়?

উত্তর:


145

দ্বিতীয় প্যারামিটার এ পুরো বিষয়টা বিস্তারিত দেখে নিন json_decode($json, $assoc, $depth)https://secure.php.net/json_decode


7
প্রশ্নের উত্তর দেয় না - একটি স্টাডি ক্লাস ডিফল্ট কেন। আরও দেখুন stackoverflow.com/questions/3193765/...
উইলিয়াম Entriken

7
এটি সত্যিকার অর্থে প্রশ্নের উত্তর দেয় না, এটি কেবল একটি কর্মক্ষেত্র সরবরাহ করে। তবে একটি লম্পট কর্ম, আইএমও। আপনি যদি চান যে জসন-এনকোডযুক্ত বস্তুগুলি অবজেক্ট হিসাবে ডিকোড করা হবে এবং স্বয়ংক্রিয়ভাবে জসন-ডিকোড্ড এসোসিয়েটিভ অ্যারেগুলি এসোসিয়েটিভ অ্যারে হিসাবে ডিকোড করা যায়? Json_decode () তে দ্বিতীয় প্যারামিটার ব্যবহার করা একরকম মানব হস্তক্ষেপকে বোঝায়। সত্যই, এটি স্তন্যপায়ী (পিএইচপি-র, এই উত্তরের নয়)
জেডিএস

@ জেডিএস আপনি খুব সহজেই এই ফাংশনগুলি মোড়ানো করতে পারেন এবং আপনার নিজের তৈরি করতে পারেন যা আপনার প্রয়োজন হলে স্বচ্ছভাবে একটি জসন কীতে উত্স টাইপ সঞ্চয় করে।
সিভান

2
@ জেডিএস আমি একটি উত্তর যুক্ত করেছি যা আসলে "পিএইচপি কেন জেএসএন বিষয়টিকে শ্রেণিতে পরিণত করে?" এই প্রশ্নের উত্তর দেয়?
ওচেম

82
$arrayDecoded = json_decode($arrayEncoded, true);

আপনাকে একটি অ্যারে দেয়


2
এটি অত্যন্ত দুঃখজনকভাবে সহায়ক, আপনাকে ধন্যবাদ কাই চেইন - আমি মনে করি যে আসল প্রশ্নটি জিজ্ঞাসা করছে, "কেন", তবে এটি তাদের উদ্দেশ্যটি পেয়েছে বলে মনে হচ্ছে। যাই হোক না কেন, আমার পরিস্থিতির জন্য নিখুঁত।
ghukill

এবং এখানে কি 4 বছর পরে একই কাজ! বেসিক জ্ঞান যা সবার আগে আমার মতো পড়াশোনা করা উচিত!
কেজেএস

20

আসল প্রশ্নের উত্তর দিতে:

পিএইচপি কেন JSON অবজেক্টকে ক্লাসে পরিণত করে?

এনকোডেড জেএসএনের আউটপুটটি ঘনিষ্ঠভাবে দেখুন, আমি ওপি কিছুটা উদাহরণ দিচ্ছি:

$array = array(
    'stuff' => 'things',
    'things' => array(
        'controller', 'playing card', 'newspaper', 'sand paper', 'monitor', 'tree'
    )
);
$arrayEncoded = json_encode($array);
echo $arrayEncoded;
//prints - {"stuff":"things","things":["controller","playing card","newspaper","sand paper","monitor","tree"]}

JSON ফর্ম্যাটটি জাভাস্ক্রিপ্ট ( ECMAScript প্রোগ্রামিং ল্যাঙ্গুয়েজ স্ট্যান্ডার্ড ) হিসাবে একই মানের থেকে উদ্ভূত হয়েছিল এবং আপনি যদি ফর্ম্যাটটি দেখেন তবে এটি জাভাস্ক্রিপ্টের মতো দেখাচ্ছে looks এটি একটি JSON অবজেক্ট ( {}= অবজেক্ট ) যা "জিনিস" মানের সাথে একটি সম্পত্তি "স্টাফ" রয়েছে এবং এর একটি সম্পত্তি "জিনিস" রয়েছে যার সাথে তার মান একটি স্ট্রিং ( []= অ্যারে ) হয়।

জেএসএন (জাভাস্ক্রিপ্ট হিসাবে) কেবলমাত্র সূচকযুক্ত অ্যারেগুলি জানে না ia সুতরাং যখন JSON একটি পিএইচপি এসোসিয়েটিভ অ্যারে এনকোড করছে, এর ফলস্বরূপ একটি জেএসওএন স্ট্রিংয়ের ফলে এই অ্যারেটিকে "অবজেক্ট" হিসাবে অন্তর্ভুক্ত করা হবে।

এখন আমরা আবার JSON ব্যবহার করে ডিকোডিং করছি json_decode($arrayEncoded)। ডিকোড ফাংশনটি জানে না যে এই JSON স্ট্রিংটি কোথা থেকে উত্পন্ন হয়েছে (একটি পিএইচপি অ্যারে) তাই এটি পিএইচপি-তে থাকা একটি অজানা বস্তুকে ডিকোডিং করছে stdClass। আপনি দেখতে পাবেন, স্ট্রিংগুলির "জিনিসগুলি" অ্যারেটি সূচকযুক্ত পিএইচপি অ্যারেতে ডিকোড হবে।

আরও দেখুন:


'জিনিসগুলির' জন্য https://www.randomlists.com/things ধন্যবাদ


2
এটি সঠিক উত্তর ... এটি প্রশ্নের উত্তর দেয়, অন্যদিকে উত্তরগুলি একটি অব্যক্ত সমস্যার জন্য কাজ করে। ধন্যবাদ, আমি ভুলে গিয়ে চেনাশোনাগুলিতে যাচ্ছিলাম যে জেএসওন সাহসী অ্যারেগুলি সমর্থন করে না!
মার্কাস

5

যদিও, উল্লিখিত হিসাবে, আপনি এখানে অ্যারে ফেরত চান তা বোঝাতে আপনি এখানে একটি দ্বিতীয় প্যারামিটার যুক্ত করতে পারেন:

$array = json_decode($json, true);

এর পরিবর্তে অনেকে হয়ত ফলাফলটি দিতে পছন্দ করতে পারেন:

$array = (array)json_decode($json);

এটি পড়তে আরও স্পষ্ট হতে পারে।


4
তারা আলাদা. আপনি যদি একটি বহুমাত্রিক অ্যারে বা অবজেক্টটি এনকোড করে রেখেছেন তবে সচেতন হন। প্রথমটি আপনাকে অ্যারের অ্যারে দেয়, দ্বিতীয়টি আপনাকে অবজেক্টগুলির অ্যারে দেয়।
হেক্টর

2

tl; dr: জাভাস্ক্রিপ্ট সহকারী অ্যারেগুলিকে সমর্থন করে না, তাই জেএসওএন সমর্থন করে না।

সর্বোপরি, এটি জাসন, জাসান নয়। :)

সুতরাং পিএইচপি জেএসএনে এনকোড করার জন্য আপনার অ্যারেরকে একটি বস্তুতে রূপান্তর করতে হবে।


1
    var_dump(json_decode('{"0":0}'));    // output: object(0=>0)
    var_dump(json_decode('[0]'));          //output: [0]

    var_dump(json_decode('{"0":0}', true));//output: [0]
    var_dump(json_decode('[0]', true));    //output: [0]

আপনি যদি জসনকে অ্যারেতে ডিকোড করেন তবে এই পরিস্থিতিতে তথ্য হারিয়ে যাবে।


0

এই ব্লগ পোস্টে একটি ভাল পিএইচপি 4 জসন এনকোড / ডিকোড লাইব্রেরি রয়েছে (এটি পিএইচপি 5 বিপরীত সামঞ্জস্যপূর্ণ) রয়েছে: পিএসপি 4 (জুন ২০০৯) এ জাসন_এনকোড () এবং জসন_ডেকোড () ব্যবহার করে

কংক্রিট কোডটি মিশাল মিগুরস্কি এবং ম্যাট কান্প্প দ্বারা লিখেছেন:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.