পিএইচপি দিয়ে জেএসনে একটি খালি অবজেক্ট তৈরি করার সর্বোত্তম উপায়?


96

একটি খালি JSON অবজেক্ট তৈরি করতে আমি সাধারণত ব্যবহার করি:

json_encode((object) null);

কোনও বস্তুর কাছে নাল কাস্টিং কাজ করে, তবে এই সমাধানের সাথে অন্য কোনও পছন্দসই উপায় এবং / বা কোনও সমস্যা আছে কি?


আপনি কেন নালকে একটি JSON অবজেক্টে রূপান্তর করবেন? এছাড়াও, শেষ ফলাফলটি {n't হবে না? আপনি ঠিক এটি করতে পারে।
আয়মান সাফাদি

4
(অবজেক্ট) (অ্যারে ()) হতে পারে? আপনার সমাধানটি ভাল শোনাচ্ছে।
ম্যালেটো

4
json_encode()একটি স্ট্রিং দেয়, কোনও বস্তু নয় not কেন এমন করবেন? আমি কি এখানে কিছু মিস করছি?
টেল্মো মার্কস

4
আসলে "{}" স্ট্রিং হিসাবে বেরিয়ে আসে! আমি এর মতো ফলাফল চাই: some "কিছু_সম্পত্তি": {}} এটি একটি খালি জেসন অবজেক্ট। আমি
আপত্তিজনিত কারণে নালকে

আমি আপনার সমাধানটি 8]
অ্যান্ড্রু

উত্তর:


117

আপনার সমাধান কাজ করতে পারে ..

ডকুমেন্টেশনটি নির্দিষ্ট করে যে (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);

4
"নতুন অ্যারেঅবজেক্ট ()" বা "(অবজেক্ট) নাল" ব্যবহার করার পরে আমি পেয়ে যাচ্ছি => "অবজেক্ট" এবং প্রতিক্রিয়া হিসাবে '{।' নয়। পিএইচপি 5.6.29 ব্যবহার করে।
রোহিতম্ব

84

আপনি যদি গতিশীল অভিধান হিসাবে বস্তুগুলি ব্যবহার করেন (এবং আমি অনুমান করি আপনি এটি করেন) তবে আমি মনে করি আপনি একটি অ্যারেঅবজেক্ট ব্যবহার করতে চান ।

এটি খালি থাকলেও এটি 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


4
এটি এখানে সবচেয়ে সঠিক উত্তর, এটি এক্ষেত্রে যা প্রয়োজন ঠিক তা করে
অ্যাভি কাপুয়া

4
ধন্যবাদ, এটি সেরা উত্তর এবং হুবহু আমার প্রয়োজন অনুসারে। এটি পড়ার আগে, আমার কোডটি শুরু হয়েছিল 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 মোটেও ব্যবহার করা নিরর্থক
ব্যবহারকারী 2690527

গ্যাচা প্রয়োগ করা উচিত নয় - যেহেতু ArrayObjectপ্রয়োগগুলি iterable, আপনি উভয়ই করতে পারেন is_iterable($foo)পাশাপাশি iterableপ্রকারের মতো ইঙ্গিতটি ব্যবহার করতে পারেন array, উদাহরণস্বরূপ ArrayAccess, উদাহরণস্বরূপ নিজেকে পাস করার বিকল্পটি নিজেকে ছেড়ে দেওয়া উচিত you
মরিৎজ ফ্রেডরিখ

কুল! উত্তর আপডেট।
রাইগিয়েল

17

ঠিক আছে, json_encode()পিএইচপি অ্যারে / অবজেক্ট / ইত্যাদি থেকে কেবল স্ট্রিংটি দেয়। আপনি আরও কার্যকরভাবে একই প্রভাব অর্জন করতে পারেন:

$json = '{}';

এটি সম্পাদন করার জন্য কোনও ফাংশন ব্যবহার করার আসলেই কোনও লাভ নেই।

আপডেট আপনার মন্তব্য আপডেট অনুযায়ী, আপনি চেষ্টা করতে পারেন:

$test = json_encode(array('some_properties'=>new stdClass));

যদিও আমি নিশ্চিত না যে আপনি যা করছেন তার চেয়ে ভাল এটি।


4
নাহ, এটি ভিতরে কিছু প্রথম বন্ধনীর সাথে একটি স্ট্রিং, আমি এর মতো কিছু অর্জন করতে চাই: {"কিছু_সম্পত্তি": {}} ... নয় some "কিছু_সম্পত্তি": "{}"} এটি আলাদা।
পিএনএ

ওরে ছি ছি, আমার পোস্ট লেখার জন্য খুব বেশি সময় ব্যয় করেছে .. 8 মিনিট দেরি হাহাহা!
ফিলিপ রোজেন -

@ রিফপি হাহা বিশ্বকোষ সংক্রান্ত উত্তরের সাথে প্রতিযোগিতা করা কঠিন :)
rdlowrey

ওহে দুঃখিত rdlowrey কিন্তু @refp খুব বিস্তৃত ছিল;)
pna

10

আমি পিএইচপি ব্যবহার করে JSON এ একটি ফাঁকা অবজেক্ট তৈরি করতে

$json=json_decode('{}');
$json->status=202;
$json->message='Accepted';
print_r($json);

যা উত্পাদিত

stdClass Object
(
    [status] => 202
    [message] => Accepted
)

যা প্রয়োজনীয়, কারণ পরে আমাকে এটি করতে হবে

if(is_object($json))

6

আমি সবসময় করি (Object)[];, যেমন:

$json = (Object)[]; // [] could also be array()

... পিএইচপিতে এটির সাথে খেলুন ...

$json = json_encode($json);

... এখন এটি আসল জেএসএন ...


2

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"}
ফেন্ডি সেটিওয়ান

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