জাভাস্ক্রিপ্ট কেন JSON.serialize এর পরিবর্তে JSON.stringify ব্যবহার করে?


18

আমি কেবল "স্ট্রিংফাই" বনাম "সিরিয়ালাইজ" নিয়ে ভাবছি । আমার কাছে তারা একই জিনিস (যদিও আমি ভুল হতে পারি) তবে আমার অতীত অভিজ্ঞতায় (বেশিরভাগ ) আমি ব্যবহার করি Serialize()এবং কখনও ব্যবহার করি না Stringify()

আমি জানি আমি জাভাস্ক্রিপ্টে একটি সাধারণ উপন্যাস তৈরি করতে পারি,

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

তবে আমি কেবল দুজনের মধ্যে পার্থক্য এবং কেন স্ট্রিংফাই বাছাই করা হয়েছিল তা নিয়ে ভাবছি।


তুলনা করার উদ্দেশ্যে, আপনি কীভাবে সিএমএল এর স্ট্রিংতে এক্সএমএলকে সিরিয়ালাইজ করবেন তা এখানে রয়েছে's

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}

7
আসলে আপনি কি পারবেন না JSON.serialize = JSON.stringify?
ড্যানিয়েল ডিপোলো

হ্যাঁ আপনি পারেন কেন।
চেজ ফ্লোরেল

1
আমি মনে করি আমার প্রশ্নটি পুনরায় পড়ার পরে, আমি দেখতে পাচ্ছি যে আমার সি # উদাহরণে, আমি এক্সএমএলকে সিরিয়াল করছি এবং তারপরে সিরিয়ালযুক্ত বস্তুকে রূপান্তর করছি ToString();। সেখানে ঘষে।
তাড়া ফ্লোরেল

আমি ধারাবাহিকতার জন্য অনুমান করি, এমন একটি পদ্ধতি (যা আমার কাছে দেখতে ভাল) এর চেয়ে ভাল হবে ... JSON.serialize(obj).toString();বা jsonObject().toString();... এইভাবে এটি আমার সি # এর মতো দেখায় ... তবে এখন আমি এটিকে জটিল করে তুলছি।
চেজ ফ্লোরেল

উত্তর:


12

আপনি যে প্রশ্নটিতে দুটি মন্তব্য রেখেছেন তা ঘনিষ্ঠভাবে দেখুন:

আমি মনে করি আমার প্রশ্নটি পুনরায় পড়ার পরে, আমি দেখতে পাচ্ছি যে আমার সি # উদাহরণে, আমি এক্সএমএলকে সিরিয়ালাইজ করছি এবং তারপরে সিরিয়ালযুক্ত বস্তু টুস্ট্রিং () রূপান্তর করছি; সেখানে ঘষে।

এবং

ধারাবাহিকতার জন্য আমার ধারণা, এই পদ্ধতিটির মতো দেখতে এমন একটি পদ্ধতি থাকলে (আমার পক্ষে) ভাল হবে ... JSON.serialize (Obj) .toString (); বা jsonObject ()। toString (); ... এটি দেখতে অনেকটা আমার সি # এর মতো লাগবে ... তবে এখন আমি এটিকে জটিল করে তুলছি।

এখন মনে রাখবেন জাভাস্ক্রিপ্টে কোনও বস্তু হ্যাশ (বরং প্রোটোটাইপ বা অন্য কাঠামো ব্যবহার করা হলে এটি একটি "বিশেষ ধরণের হ্যাশ" হিসাবে যোগ্য হওয়া উচিত - তবে সাধারণ ফর্মটি উদাহরণ হিসাবে কাজ করে):

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

serialize()জাভাস্ক্রিপ্টে প্রয়োজনীয়তার একমাত্র কারণ হ'ল ফাংশনগুলি কাটা, অন্যান্য বস্তুর উল্লেখ ইত্যাদি etc.

সুতরাং, আপনার সি # উদাহরণে ফিরে যেতে - আমরা কেবল .Serialize()অপ্রয়োজনীয় হিসাবে কাটা করেছি । একটি অবজেক্ট হ্যাশ, এটি ইতিমধ্যে সিরিয়ালাইজড, আরও "সিরিয়ালাইজেশন" যাইহোক আপনার নিজের কোডে ম্যানুয়ালি করতে হবে। আপনাকে ছেড়ে যা .ToString()

.stringify()এখন কি আরও বুদ্ধিমান?


হ্যাঁ, স্ট্রিংফাই বোঝা যায়, তবে আমি তার চেয়ে বরং ব্যবহার করব.toString()
চেজ ফ্লোরেল

7
টসস্ট্রিং যে কোনও অর্থ হতে পারে। JSON.stringify স্পষ্টতই JSON।
ব্র্যান্ডন

11

এটি কারণ যে জেএসওএন স্বরলিপিটি 2002 সালের পরে নয় 1999 সালে নির্দিষ্ট করা হয়েছিল ( asp.netসে বছর প্রকাশিত হয়)। সুতরাং আমি অনুমান করি যে তারা সম্পর্কে জানে না serialize

রসিকতা বাদ,

শব্দটি শুনে serialization, আমার মনে প্রথম যে বিষয়টি আসে তা হ'ল ডেটা বাইটে রূপান্তরিত করার মতো, এখানে JSON.stringify নিখুঁত ধারণা দেয় কারণ এটি বস্তুকে একটি স্ট্রিং উপস্থাপনায় রূপান্তরিত করে বাইট উপস্থাপনা নয়।

পুনশ্চ:

@ ফেস ফ্লোরেল, আপনি কেবল যুক্ত করতে পারবেন না JSON.serialize, যেমন কঠোর মোডে, এই কোডটি কিছু ব্রাউজারে আসলে ব্যর্থ হতে পারে।

যেমনটি JSONআপনার গড় অবজেক্ট নয়।


আমি আমার (সীমাবদ্ধ) অভিজ্ঞতায় অনুমান করি যে কোনও কিছুকে সিরিয়ালাইজ করা সর্বদা ফ্ল্যাট ফাইল স্টোরেজের জন্য স্ট্রিংয়ের কোনও রূপে রূপান্তরিত করে চলেছে। আপনি যা বলছেন তা আমি পেয়েছি।
চেজ ফ্লোরেল

আমি ভেবেছিলাম এটি 2001 ছিল .. উইকিপিডিয়া দেখুন । নামটি সম্ভবত ডগলাস ক্রকফোর্ডের ব্যক্তিগত পছন্দ ছিল। 1999 তৃতীয় ইসিএমএ স্ট্যান্ডার্ড প্রকাশিত হয়েছিল, যার ভিত্তিতে জেএসওএন প্রতিষ্ঠিত।
মার্টিজন পিটারস

1
@ চেজফ্লোরিল সিরিয়ালাইজিং মানে আক্ষরিক অর্থে মেমরি অবজেক্টকে ক্রমিকভাবে সংগৃহীত ডেটা ফর্ম্যাটে রূপান্তরিত করা যাতে এটি পারমাণবিকভাবে অন্তর্ভুক্ত থাকতে পারে, আমি বিশ্বাস করি এটি করার আরও একটি সাধারণ পদ্ধতি নেটওয়ার্ক বা অন্য কোনও ক্ষেত্রে প্রেরণের জন্য বাইটওয়াইজ উপস্থাপনা হবে।
জিমি হোফা 16

@ভিনাশর, পুনরায়: আপনার পিএস: সম্পাদনা করুন ... এই ফিডেলটি ব্যর্থ বলে মনে হচ্ছে না। আপনি কীভাবে ব্যাখ্যা করতে পারেন " JSONআপনার গড় অবজেক্টটি কীভাবে নয়"? আমি ছদ্মবেশী হচ্ছি না, আপনি কী বোঝাতে চেয়েছেন তা পরিষ্কার নয়।
চেজ ফ্ল্লোল

2
@ চেজফ্লোরিল সঠিক - জাভাস্ক্রিপ্ট সম্পর্কিত, জেএসওএন বৈধ জাভাস্ক্রিপ্ট অবজেক্টের একটি উপসেট । একটি সহজ উদাহরণের জন্য আমার উত্তর দেখুন: সমস্ত বৈধ JSON একটি বৈধ জাভাস্ক্রিপ্ট অবজেক্ট / হ্যাশ, তবে সমস্ত জাভাস্ক্রিপ্ট অবজেক্ট / হ্যাশ বৈধ JSON নয়। এটি এমনকি নামেও রয়েছে - জেএসওএন "জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন" for
ইজকাটা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.