YAML এবং JSON এর মধ্যে পার্থক্য কী?


733

YAML এবং JSON এর মধ্যে পার্থক্যগুলি কী কী, বিশেষত নিম্নলিখিত বিষয়গুলি বিবেচনা করে?

  • পারফরম্যান্স (এনকোড / ডিকোড সময়)
  • স্মৃতিশক্তি
  • এক্সপ্রেশন স্পষ্টতা
  • গ্রন্থাগারের উপলব্ধতা, ব্যবহারের সহজতা (আমি সি পছন্দ করি)

আমি কনফিগার করা ফাইলগুলি সঞ্চয় করতে আমাদের এমবেডড সিস্টেমে এই দুটির একটিরও ব্যবহার করার পরিকল্পনা করছিলাম।

সম্পর্কিত:

আমার পার্ল ডেটা সঞ্চয় করার জন্য আমার কি ওয়ামএল বা জেএসএন ব্যবহার করা উচিত?


26
জাগ্রত হন যে জেএসএনকে YAML এর একটি উপসেট হিসাবে বিবেচনা করা যেতে পারে: en.wikedia.org/wiki/JSON#YAML
চার্লস

2
@ চার্লস, হ্যাঁ, তবে তাদের কিছু সূক্ষ্ম পার্থক্য রয়েছে: আজাকিয়ান.com
আরচাইভস

1
ওয়াইএএমএল (আনুমানিক) জেএসএনের সুপারস্টার হওয়ার কারণে, আপনি সেই ভাবটি ব্যবহার করবেন কিনা তা অনুমান করা ছাড়া পারফরম্যান্সের প্রশ্নের উত্তর দেওয়া যাবে না। আপনার যদি এটির প্রয়োজন না হয়: জেএসওএন পড়ার ক্ষেত্রে ওয়াইএএমএল পার্সার কত দ্রুত? আপনার যদি এটির প্রয়োজন হয়: আপনি একই ধারণাটির সম্ভবত দীর্ঘতর জেএসএন প্রতিনিধিত্ব করার অনুমতি দিলে JSON পার্সারগুলি কত ধীর হয়?
পুলি

@ জোকুন আমার অনুমান "আমি একটি সি লাইব্রেরি পছন্দ করবো" (উদাঃ লাইবায়ামল)
ডিবিআর

4
YAML নথি পারেন জটিল এবং পড়তে কঠিন হতে। ওয়াইএএমএল দিয়ে একটি "বিলিয়ন হেসে" আক্রমণ সম্ভব। অন্যদিকে, জটিল বস্তু, গ্রাফ এবং অন্যান্য কাঠামোগুলি ওয়াইএএমএলে দক্ষতার সাথে সিরিয়ালাইজ করা যেতে পারে। বিনিময় ফর্ম্যাট এবং সাধারণ কাঠামোর জন্য, জেএসএন পছন্দ করা হয়। জটিল অবজেক্ট সিরিয়ালাইজেশনের জন্য, বা ব্যাকরণ সংজ্ঞাগুলির জন্য, ওয়াইএএমএল পছন্দ করা যেতে পারে।
এরিক অ্যারোনস্টি

উত্তর:


655

টেকনিক্যালি ওয়াইএএমএল হ'ল জেএসএনের সুপারস্টার et এর অর্থ হ'ল, তাত্ত্বিকভাবে কমপক্ষে, একজন ওয়াইএএমএল পার্সার জেএসএনকে বুঝতে পারে, তবে অন্যভাবে অন্যভাবে নয়।

"YAML: JSON এর সাথে সম্পর্ক" শিরোনামে বিভাগে, সরকারী চশমা দেখুন ।

সাধারণভাবে, ওয়াইএএমএল সম্পর্কে আমি পছন্দ করি এমন কিছু জিনিস রয়েছে যা জেএসএনে উপলব্ধ নয়।

  • @ জডুপন্টটি যেমন উল্লেখ করেছে , ওয়াইএএমএল দেখতে তাত্ক্ষণিকভাবে আরও সহজ। আসলে YAML হোমপেজটি নিজেই বৈধ YAML, তবুও কোনও মানুষের পক্ষে এটি পড়া সহজ easy
  • "অ্যাঙ্কারস" ব্যবহার করে YAML ফাইলের মধ্যে অন্যান্য আইটেমগুলি রেফারেন্স করার ক্ষমতা YAML এর রয়েছে। সুতরাং এটি সম্পর্কিত তথ্য হ্যান্ডেল করতে পারে কারণ মাইএসকিউএল ডেটাবেজে কেউ খুঁজে পেতে পারে।
  • YAML ফাইলের মধ্যে JSON বা XML এর মতো অন্যান্য সিরিয়ালাইজেশন ফর্ম্যাটগুলি এম্বেড করা সম্পর্কে আরও জোরালো Y

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

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

আপনি JSON এবং YAML উভয়ের জন্য সি লাইব্রেরি পাবেন। ওয়াইএএমএল এর লাইব্রেরিগুলি আরও নতুন হতে থাকে তবে অতীতে তাদের সাথে আমার কোনও সমস্যা হয়নি। উদাহরণস্বরূপ Yaml-cpp দেখুন


199
JSON হয় না একটি উপসেট (যদিও এটা বন্ধ), এবং অসামঞ্জস্যপূর্ণ infuriating হয় যখন আপনি তাদের encouter। জসন লাইব্রেরিগুলি সাধারণত দ্রুত হয় ... ( স্ট্যাকওভারফ্লো . com / জিজ্ঞাসা / ২45৫১73৩২ / ......... )। ইয়ামল প্রবক্তারা জোর দেবেন যে এটি একটি উপসেট। পাঠযোগ্যতা যদি উদ্বেগের বিষয় হয় তবে ইয়ামল ব্যবহার করুন। আন্তঃব্যবহারযোগ্যতা এবং গতি যদি উদ্বেগের বিষয় হয় তবে JSON ব্যবহার করুন।
এরিক অ্যারোনস্টি

6
ওয়াইএএমএল হ'ল জেএসওএন সিনট্যাক্সের একটি বিশেষ ফর্মের সুপারসেট। এটি হ'ল, আপনি যদি জেএসএনকে এমনভাবে ব্যবহার করেন যা ওয়াইএএমএলের সাথে সামঞ্জস্যপূর্ণ হয় তবে এটি একটি উপযুক্ত উপসেট। যেমন পিয়ের উপরে মন্তব্য করেছে, চশমাগুলি [সামঞ্জস্যের দিকে লক্ষ্য করছে] (আজাজিয়ান / আর্কাইভস / জাজন- আইমল- বিটসটিং-ক্লোজার- টু ট্রুথ)।
nnot101

120
এছাড়াও ওয়াইএএমএল মন্তব্যগুলি সমর্থন করে যা কার্যকর।
ডেন

59
@ এরিক অ্যারনেস্টি জেএসএন ওয়াইএএমএল ১.১ এর একটি উপসেটের কাছাকাছি ছিল, তবে ইয়ামএল ১.২ থেকে এটি এখন একটি সত্য উপসেট। YAML 1.2 প্রাথমিকভাবে দুটি স্পেসিফিকেশনের মধ্যে সর্বশেষ কয়েকটি অসম্পূর্ণতাগুলি লোহার জন্য প্রকাশিত হয়েছিল।
00 প্রমিথিউস

64
থেকে YAML 1.2 বৈশিষ্ট : "এই সংস্করণ প্রাথমিক উদ্দেশ্য একটি সরকারী উপবিন্যাস হিসেবে JSON সঙ্গে সম্মতি মধ্যে YAML আনতে হয়।"
ধনী সি

203

পার্থক্য:

  1. YAML, আপনি কীভাবে এটি ব্যবহার করেন তার উপর নির্ভর করে জেএসএনের চেয়ে বেশি পঠনযোগ্য হতে পারে
  2. জেএসএন প্রায়শই দ্রুত এবং সম্ভবত আরও সিস্টেমে আন্তঃযোগযোগ্য
  3. খুব দ্রুত "JSON পার্সার" লিখতে সম্ভব write
  4. সদৃশ কীগুলি, যা সম্ভাব্য বৈধ জেএসএন, অবশ্যই অবৈধ ওয়াইএএমএল।
  5. ওয়াইএএমএলে মন্তব্য এবং রিলেশনাল অ্যাঙ্কর সহ একাধিক বৈশিষ্ট্য রয়েছে। ওয়াইএএমএল সিনট্যাক্স সেই অনুসারে যথেষ্ট জটিল এবং এটি বোঝা শক্ত।
  6. ইয়ামলে পুনরাবৃত্ত কাঠামো লেখা সম্ভব: {a: &b [*b]}যা কিছু রূপান্তরকারীগুলিতে অসীম লুপ হয়ে যাবে। এমনকি বিজ্ঞপ্তি সনাক্তকরণের পরেও একটি "ইয়ামল বোমা" এখনও সম্ভব ( এক্সএমএল বোমা দেখুন )।
  7. কোনও রেফারেন্স নেই বলে, JSON এ অবজেক্ট রেফারেন্স সহ জটিল কাঠামোগত সিরিয়ালাইজ করা অসম্ভব। ওয়াইএএমএল সিরিয়ালাইজেশন তাই আরও দক্ষ হতে পারে।
  8. কিছু কোডিং পরিবেশে, ওয়াইএএমএল ব্যবহার একটি আক্রমণকারীকে স্বেচ্ছাসেবী কোড চালানোর অনুমতি দিতে পারে

পর্যবেক্ষণ:

  1. পাইথন প্রোগ্রামাররা সাধারণত ইএএমএল-এর বড় ভক্ত, স্তরগুলি নির্দেশ করার জন্য বন্ধনী বিন্যাসের পরিবর্তে ইনডেন্টেশন ব্যবহারের কারণে।
  2. অনেক প্রোগ্রামার ইনডেন্টেশন "অর্থ" সংযুক্তি একটি খারাপ পছন্দ বিবেচনা করে।
  3. যদি ডেটা ফর্ম্যাটটি কোনও অ্যাপ্লিকেশনটির পরিবেশ ছেড়ে চলে যায়, কোনও ইউআই এর মধ্যে পার্স করা হয়, বা ম্যাসেজিং লেয়ারে প্রেরণ করা হয় তবে জেএসএন আরও ভাল পছন্দ হতে পারে।
  4. YAML ব্যাকরণ সংজ্ঞা মত জটিল কাজের জন্য সরাসরি ব্যবহার করা যেতে পারে, এবং প্রায়শই একটি নতুন ভাষা উদ্ভাবনের চেয়ে ভাল পছন্দ।

9
এটাই. ইয়ামল ১.২ এর সম্পূর্ণ উদ্দেশ্য ছিল JSON কে একটি কঠোর উপসেট তৈরি করার জন্য কয়েকটি সামঞ্জস্যতার পার্থক্যগুলি সমাধান করা। আপনি যদি বিশ্বাস করেন যে অনুমানটি এর উদ্দেশ্য অর্জন করে নি, এরিক, দয়া করে বৈধ JSON এর কোথাও এমন একটি উদাহরণ দেখান যা YAML স্পেসটিকে লঙ্ঘন করে এবং / অথবা একটি যাচাই করা 1.2-অনুবর্তী YAML পার্সার ভেঙে দেয়।
এসএফলে

32
@ এসএফলে ই ওয়ামএল স্পেক বলছে এমন সম্ভাব্য বৈধ জেএসএন ফাইল রয়েছে যা অকার্যকর ওয়াইএমএল হবে would তবে এটি সম্ভবত ব্যবহারের ক্ষেত্রে নেই। "জেএসএনের আরএফসি ৪6277 এর ম্যাপিং কীগুলি কেবল" হওয়া উচিত "অনন্য হওয়া দরকার, যদিও ওয়াইএএমএল তাদের" আবশ্যক "হওয়া উচিত। প্রযুক্তিগতভাবে, ওয়ামএইচএল তাই জাসন স্পেকের সাথে সম্মতি জানায়, সদৃশকে একটি ত্রুটি হিসাবে বিবেচনা করে। অনুশীলনে, যেহেতু জেএসএন নীরব রয়েছে এই জাতীয় সদৃশগুলির শব্দার্থবিজ্ঞানের একমাত্র পোর্টেবল জেএসএন ফাইল হ'ল সেই অনন্য কী রয়েছে, যা বৈধ YAML ফাইল "" - yaml.org/spec/1.2/spec.html#id2759572
ডেভিড সি বিশপ

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

10
ট্যাবগুলি কেবল ইনডেন্টেশন চরিত্র হিসাবে অনুমোদিত নয়। আইএমএইচও, সমস্ত ভাষায় কোডিং স্টাইলটি ভাল - সিনট্যাকটিক ইনডেন্টেশন সহ বা ছাড়াই।
00 প্রমিথিউস

6
@ ওয়ার্মউড আমি ব্যক্তিগতভাবে পাইথন এবং ওয়াইএএমএল পছন্দ করি এবং আক্ষরিকভাবে প্রতিদিন এটি ব্যবহার করি। লোকেরা প্রায়শই সম্পাদনা করতে হয় এমন স্টাফগুলির জন্য YAML এবং লোকেরা "সম্ভবত" দেখাতে পারে এমন স্টাফগুলির জন্য JSON ব্যবহার করতে চাই। আমি সি ++ ডিভস দ্বারা বৈধ সমালোচনার শিকার হয়েছি যারা ইনডেন্টেশনটি বিভ্রান্তিকর বলে মনে করে .... বিশেষত যদি একাধিক স্তর বা দীর্ঘতর ফাংশন ব্লক থাকে। অবশ্যই ... ভাল টেস্টেবল কোডে সেই জিনিসগুলি থাকে না, তাই এটি সাধারণত সমস্যা হয় না। এটি আমার ব্যক্তিগত পর্যবেক্ষণ, তবে যে কোনও নৈমিত্তিক গুগল অনুসন্ধানে অনেক ফলাফল পাওয়া যাবে ... তাই যাচাই করা তুচ্ছ।
এরিক অ্যারোনস্টি

88

অজানা তত্ত্ব বাইপাস

এটি শিরোনামটির জবাব দেয়, বিশদটি নয় যেমন আমার মতো গুগলে অনুসন্ধান ফলাফল থেকে শিরোনামটি পড়ে তাই আমি মনে করি যে এটি ওয়েব বিকাশকারী দৃষ্টিকোণ থেকে ব্যাখ্যা করা দরকার ।

  1. ওয়াইএএমএল স্পেস ইনডেন্টেশন ব্যবহার করে যা পাইথন বিকাশকারীদের জন্য পরিচিত অঞ্চল।
  2. জাভাস্ক্রিপ্ট বিকাশকারীরা জেএসনকে পছন্দ করে কারণ এটি জাভাস্ক্রিপ্টের একটি উপসেট এবং স্পেস ছাড়াই সাধারণ ভেরিয়েবলের নাম ব্যবহার করার সময় কীসগুলিতে কোনও ডাবল উদ্ধৃতি প্রয়োজন নেই, জাভাস্ক্রিপ্টের অভ্যন্তরে সরাসরি ব্যাখ্যা করা যেতে পারে এবং জাভাস্ক্রিপ্টের অভ্যন্তরে লিখিত হতে পারে।
  3. পার্সারদের আধিক্য রয়েছে যা YAML এবং JSON উভয়ের জন্য সমস্ত ভাষায় খুব ভাল কাজ করে well
  4. YAML এর স্পেস ফর্ম্যাটটি অনেক ক্ষেত্রে দেখতে আরও সহজ হতে পারে কারণ ফর্ম্যাটিংয়ের জন্য আরও বেশি মানব-পঠনযোগ্য পদ্ধতির প্রয়োজন।
  5. YAML এর ফর্মটি আরও কমপ্যাক্ট এবং দেখার পক্ষে সহজ হওয়ার সাথে সাথে যদি সম্পাদকের কাছে স্পেস ফর্ম্যাটিং দৃশ্যমান না থাকে তবে সম্পাদনা করা ছদ্মবেশী কঠিন। ট্যাবগুলি ফাঁকা স্থান নয় যাতে আপনার কীস্ট্রোককে ফাঁকা জায়গায় ব্যাখ্যা করার জন্য সম্পাদক না থাকলে আরও বিভ্রান্ত করে।
  6. YSL যাচাই করার জন্য উল্লেখযোগ্যভাবে কম বৈশিষ্ট্যগুলির কারণে জেএসএন সিরিয়ালিয়ালকরণ এবং ডিসিরিয়ালাইজেশন করতে অনেক দ্রুত, যা জেএসওএন প্রক্রিয়া করতে ছোট এবং লাইটার কোডকে সক্ষম করে।
  7. একটি সাধারণ ভুল ধারণাটি হ'ল ওয়াইএএমএলটির কম বিরামচিহ্নের প্রয়োজন হয় এবং জেএসএনের চেয়ে কমপ্যাক্ট তবে এটি সম্পূর্ণ মিথ্যা। হোয়াইটস্পেস অদৃশ্য তাই দেখে মনে হয় কম অক্ষর রয়েছে তবে আপনি যদি যথাযথ হোয়াইটস্পেস গণনা করেন যা YAML এর সঠিক ব্যাখ্যা করার পাশাপাশি যথাযথভাবে ব্যাখ্যা করতে পারে তবে আপনি দেখতে পাবেন যে ওয়াইএএমএলকে আসলে জেএসওনের চেয়ে আরও বেশি অক্ষর প্রয়োজন। জেএসএন হায়ারার্কি বা গ্রুপিং উপস্থাপনের জন্য সাদা স্থান ব্যবহার করে না এবং আরও কমপ্যাক্ট ট্রান্সপোর্টের জন্য অপ্রয়োজনীয় সাদা স্পেস সরানো দিয়ে সহজেই সমতল করা যায়।

ঘরে হাতি: নিজেই ইন্টারনেট

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

আপনি যদি কোনও ওয়েব প্রোগ্রামিং করে থাকেন তবে জেএসএন হ'ল ডিফল্ট উপায় কারণ জাভাস্ক্রিপ্ট নিয়ে কাজ করার সময় কোনও অনুবাদ ধাপের প্রয়োজন নেই সুতরাং সেই ক্ষেত্রে JSON এর উপর ওয়াইএএমএল ব্যবহার করার জন্য আপনাকে আরও ভাল যুক্তি দিয়ে আসতে হবে।


10
আমি একমত নই যে পাইথন বিকাশকারীরা YAML পছন্দ করে। পাইথনস ডিকটি মূলত জেএসএন, ডিক্টের তালিকাটিও মূলত জেএসএন। পাইথন জসন লাইব তৈরি করেছে। পাশের নোটে আমি পাইথন বিকাশকারী এবং আমি জেএসওএনকে পছন্দ করি (বেশিরভাগ পাইথন বিকাশকারী আমি জানি জেএসওএনকে পছন্দ করি)।
করানতান

6
একটি জিনিস যা আমাকে সাদা স্পেস সম্পর্কে সত্যই বিরক্ত করে তা হ'ল বিভ্রান্ত হওয়া এবং এডেন্টিং হিসাবে ভুল হওয়ার পক্ষে এটি খুব সহজেই বাসা বাঁধতে বা একই স্তরে বোঝাতে পারে এবং ত্রুটিও পাওয়া খুব সহজ যে আপনি যদি না করেন তবে একটি গাইড বিধি আছে। এটি লুকানো উফগুলির মতো এটি সত্যিই এত সহজ ধরণের দৃশ্য নয় যা ইয়ামল সম্পাদনা করার সময় কেউ বলে না। জেসন নিয়ে কখনই সমস্যা ছিল না।
জেসন সেব্রিং 13

6
@JasonSebring। আপনি প্রায় অবাক হবেন যে কেন YAML স্পেস দিয়ে চলেছে। ওয়াইএএমএল-এর আমার প্রথম 'সমুদ্রে ডুবানো' একটি ভাঙা অ্যাপ্লিকেশন নিয়ে গেছে ... সমস্ত জায়গার কারণে। আপনি ভেবেছিলেন যে সম্ভবত মুদ্রণবিহীন অক্ষর ব্যবহার না করে একটি ইন্ডেন্টেশন ব্যবহার করা আরও অনেক বেশি অর্থবোধ করে! (এই কারণেই কেন পৃথিবীতে তারা '' এর চেয়ে '' বেছে নেয়নি?) ওয়াইএএমএল বোঝার জন্য আপনাকে চশমার দিকে যেতে হবে। জেএসওএন বুঝতে এটির দরকার নেই। (আমি প্রাক্তনের কাছে ছিলাম, এবং এরপরেও কখনই আসছি না)। এটি আমার কাছে এমন একটি ফর্ম্যাট নির্দেশ করে যা সত্যই 'মানব পাঠযোগ্য' নয়
সেমরোয়ানিরগো

7
@ সিএমক্রোনির্গো ইয়া এই আমার অভিজ্ঞতা ছিল। আমার বস আমাদের জেএসএনের উপর ওয়াইএএমএল ব্যবহার করতে বাধ্য করেছিল এবং এটি সম্পাদনা করতে এবং আটকানোর জন্য জিনিসকে অযথা কৃপণ করে তোলে। আমি এটি লিখেছিলাম কারণ আশা করি ভোটগুলি আমাকে সমর্থন করবে।
জেসন সেব্রিং

3
ওয়াইএএমএলে ট্যাবগুলির সাথে সমস্যার অর্থ হ'ল (ক) ত্রুটি বার্তাটি না পড়া এবং (খ) এমন একটি সম্পাদক থাকা যাতে ট্যাবগুলি হাইলাইট হয় না। দুটি সমস্যাই সহজেই স্বরূপযোগ্য, তাই অভিযোগগুলি আমি বুঝতে পারি না।
টুলফোজার 20'18

38

এই প্রশ্নটি 6 বছরের পুরনো, তবে আশ্চর্যের বিষয় হল, উত্তরের কোনও উত্তরই চারটি পয়েন্টকে (গতি, স্মৃতি, অভিব্যক্তি, বহনযোগ্যতা) সত্যই সম্বোধন করে না।

দ্রুততা

স্পষ্টতই এটি বাস্তবায়ন-নির্ভর, তবে জেএসএন এত ব্যাপকভাবে ব্যবহৃত হয়, এবং এটি প্রয়োগ করা খুব সহজ, এটি বৃহত্তর নেটিভ সমর্থন পেতে ঝোঁক করেছে, এবং তাই গতি। YAML जेএসএন যা কিছু করে তা আরও বিবেচনা করে এবং একটি ট্রাক বোঝা আরও বিবেচনা করে, উভয়ের যে কোনও তুলনামূলক বাস্তবায়ন সম্ভবত, জেএসওএন দ্রুততর হবে।

তবে, প্রদত্ত যে কোনও ওয়াইএএমএল ফাইলটি তার জেএসএন সমকক্ষের তুলনায় কিছুটা ছোট হতে পারে (কম "এবং ,চরিত্রের কারণে ), সম্ভবত সম্ভাব্য একটি উচ্চতর অনুকূল YAML পার্সার ব্যতিক্রমী পরিস্থিতিতে দ্রুত হতে পারে।

স্মৃতি

মূলত একই যুক্তি প্রযোজ্য। যদি কোনও ডিএমএল পার্সার একই ডেটা কাঠামোর প্রতিনিধিত্ব করে তবে কোনও ওয়াইএএমএল পার্সার কেন জেএসএন পার্সারের চেয়ে মেমরির দক্ষ হতে পারে তা দেখা মুশকিল।

expressiveness

যেমন অন্যদের দ্বারা উল্লিখিত হয়েছে, পাইথন প্রোগ্রামাররা জেএসএনের দিকে ওয়াইএএমএল, জাভাস্ক্রিপ্ট প্রোগ্রামারগুলিকে অগ্রাধিকার দেওয়ার দিকে ঝুঁকছেন। আমি এই পর্যবেক্ষণগুলি করব:

  • এটি JSON এর সম্পূর্ণ বাক্য গঠনটি মুখস্ত করা সহজ, এবং তাই কোনও JSON ফাইলের অর্থ বোঝার বিষয়ে খুব আত্মবিশ্বাসী হন। YAML কোনও মানুষের দ্বারা সত্যই বোধগম্য নয়। সূক্ষ্মতা এবং প্রান্তের মামলার সংখ্যা চরম।
  • কয়েকটি পার্সার পুরো স্পেকটি বাস্তবায়িত করার কারণে, প্রদত্ত প্রসঙ্গে একটি প্রদত্ত অভিব্যক্তির অর্থ সম্পর্কে নিশ্চিত হওয়া আরও শক্ত।
  • জেএসএনে মন্তব্যের অভাব বাস্তবে, একটি বাস্তব ব্যথা।

পোর্টেবিলিটি

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

সারসংক্ষেপ

জেএসএন হ'ল পারফরম্যান্সের জন্য (যদি প্রাসঙ্গিক হয়) এবং আন্তঃঅযুক্তিযোগ্যতা। YAML মানব-রক্ষণাবেক্ষণ করা ফাইলগুলির জন্য ভাল। HJSON একটি শালীন সমঝোতা যদিও অনেক হ্রাস বহনযোগ্যতা সহ। JSON5 একটি আরও যুক্তিসঙ্গত সমঝোতা, সুসংজ্ঞায়িত বাক্য গঠন সহ ax


3
আমি আসলে ভেবেছিলাম যে অদৃশ্য চরিত্রগুলি যা আমাকে এইরকম বোকা বানিয়েছিল বলেই ওয়াইএএমএল ছোট ছিল। অদৃশ্য => সেখানে নেই, আসলে নেই। যদি আপনি অদৃশ্য চরিত্রগুলি সেখানে থাকতেই গণনা করেন, বিশেষত ওয়াইএএমএল বৃহত্তর বাসা বাঁধে, এটি দ্রুত জেএসএনকে ছাড়িয়ে যায়। আমি কেবল ভেবেছিলাম যে এটি খুব আকর্ষণীয় ছিল কারণ মানব-পঠনযোগ্য অংশটি আমাদের বেশিরভাগটিকে সেই ধারণার মধ্যে বোকা বানিয়েছে যতক্ষণ না আমি সত্যিই এটি সম্পর্কে চিন্তা না করি যতক্ষণ আপনি জেএসএন এবং ওয়াইএমএলকে সমতল করতে পারবেন না, এতটা নয়। আমি ওয়াইএএমএলকে সম্পাদনা হাতছাড়া করা, পড়া না করা, সম্পাদনা করা ঠিক যেমন সম্পাদনা করা দরকার তাই সম্পাদনা করা খুব সহজ বলে মনে হয়েছিল, অনেক সময় খুব সহজেই নেস্টেড আইটেমগুলি ভুল করে।
জেসন সেব্রিং

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

এটি সত্য, তবে তারা কীভাবে দুটি তুলনা করতে চেয়েছিল সে সম্পর্কে প্রশ্নটি বেশ কয়েকটি নির্দিষ্ট নির্দিষ্ট পরামিতি তৈরি করেছিল। ব্যক্তিগতভাবে, আমি কখনই কোনও কিছুর জন্য YAML ব্যবহার করব না। আমি আন্তঃব্যবহারযোগ্যতার জন্য JSON, অথবা মানুষের রক্ষণাবেক্ষণ জরুরি হলে JSON6 ব্যবহার করব।
স্টিভ বেনেট

29

জিআইটি এবং ওয়াইএএমএল

অন্য উত্তরগুলি ভাল। প্রথমে সেগুলি পড়ুন। তবে আমি কখনও কখনও YAML ব্যবহার করার জন্য অন্য একটি কারণ যুক্ত করব: গিট

ক্রমবর্ধমান, অনেক প্রোগ্রামিং প্রকল্প বিতরণ এবং সংরক্ষণাগার জন্য গিট সংগ্রহস্থল ব্যবহার করে। এবং, যদিও গিট রেপোর ইতিহাস সমানভাবে JSON এবং YAML ফাইলগুলি সঞ্চয় করতে পারে, কোনও ফাইলের পরিবর্তনগুলি ট্র্যাকিং এবং প্রদর্শনের জন্য ব্যবহৃত "ডিফ" পদ্ধতিটি লাইন-ওরিয়েন্টেড। যেহেতু YAML বাধ্যতামূলকভাবে লাইন-ভিত্তিক হতে বাধ্য, তাই YAML ফাইলে যেকোন ছোট পরিবর্তন মানুষের দ্বারা সহজেই দেখা যায়।

অবশ্যই এটি সত্য যে JSON ফাইলগুলি স্ট্রিং / কীগুলি বাছাই করে এবং ইনডেন্টেশন যুক্ত করে "সুন্দর" করা যায়। তবে এটি ডিফল্ট নয় এবং আমি অলস।

ব্যক্তিগতভাবে, আমি সাধারণত সিস্টেম-টু-সিস্টেমের মিথস্ক্রিয়া জন্য JSON ব্যবহার করি। আমি প্রায়শই কনফিগারেশন ফাইল, স্ট্যাটিক ফাইল এবং ট্র্যাক করা ফাইলগুলির জন্য YAML ব্যবহার করি। (আমি সাধারণত ওয়াইএএমএল রিলেশনাল অ্যাঙ্কার যুক্ত করা এড়াতে পারি lo লুপগুলি অনুসন্ধান করার জন্য জীবন খুব ছোট))

এছাড়াও, যদি গতি এবং স্থান সত্যিই উদ্বেগজনক হয় তবে আমিও এটি ব্যবহার করি না। আপনি BSON তাকান করতে পারেন।


22

আমি YAMLটিকে চোখের চেয়ে সহজ বলে মনে করি: কম বন্ধনী, "" ইত্যাদি Y

কর্মক্ষমতা / সংস্থানগুলির ক্ষেত্রে, আমি উভয়ের মধ্যে বড় পার্থক্য আশা করবো না।

ফিউটারমোর, আমরা কনফিগারেশন ফাইলগুলির বিষয়ে কথা বলছি এবং তাই আমি এনকোড / ডিকোড ক্রিয়াকলাপের একটি উচ্চ ফ্রিকোয়েন্সি আশা করব না, না?


22
ট্যাবগুলির বিরক্তি দ্বারা আপনি কী বোঝাতে চেয়েছিলেন তা অবাক করেছিলাম । আমি বিশ্বাস করি যে জিনিসটি ট্যাব অক্ষরগুলি ইয়ামলে অনুমোদিত নয় , যা ব্যক্তিগতভাবে আমি মনে করি যে কোনও উত্স ফাইলে একটি ভাল ধারণা
পুলি

6
@ পুলি: জালডুপন্ট সম্ভবত ওয়াইএএমএলে সিনট্যাকটিক্যালি তাৎপর্যপূর্ণ শীর্ষস্থানীয় সাদা স্থানকে উল্লেখ করছে ।
nnot101

10
ঠিক আছে তবে তারা ট্যাব নয়।
পুলি

20

ওয়াইএএমএল রয়েছে এমন কোনও বৈশিষ্ট্য এবং জেএসওএনের যদি আপনার প্রয়োজন না হয় তবে আমি জেএসওএনকে পছন্দ করব কারণ এটি খুব সহজ এবং ব্যাপকভাবে সমর্থিত (বহু ভাষায় প্রচুর গ্রন্থাগার রয়েছে)। ওয়াইএএমএল আরও জটিল এবং এর কম সমর্থন রয়েছে। আমি মনে করি না পার্সিং গতি বা মেমরি ব্যবহার খুব আলাদা হবে, এবং আপনার প্রোগ্রামের পারফরম্যান্স একটি বড় অংশ না।


3
YAML আরও জটিল কোন উপায়ে?
অ্যাক্যাটায়িক

18
উদাহরণস্বরূপ, ওয়াইএএমএল অ্যাঙ্করগুলিকে সমর্থন করে, যেমনটি অন্য উত্তরে উল্লিখিত হয়েছে। অন্যান্য বৈশিষ্ট্য রয়েছে যেমন এক্সটেনসিবল ডেটা ধরণের। এটি পার্স করা আরও জটিল করে তোলে এবং কেন ওয়াইএএমএল আরও বৃহত্তর বৈশিষ্ট্যযুক্ত তা ব্যাখ্যা করে। পার্সার বাস্তবায়নের উপর নির্ভর করে এটি পারফরম্যান্সের ক্ষতি করতে পারে (এই প্রশ্নটি একবার দেখুন: stackoverflow.com/questions/2451732/… )।
আন্তন স্ট্রোগনফ

5
জটিলতা সামগ্রিকতর বৃহত্তর সরলতা অর্জনের জন্য শক্তি কিনলে সরলতার চেয়ে জটিল। আপনার ডেটা মডেলের জটিলতার উপর নির্ভর করে এটি অবশ্যই সত্য।
জোনাথন নিউফিল্ড

3
আমার এখানে কিছুটা দেরি হতে পারে তবে ওয়াইএএমএল মন্তব্যগুলিতে যোগ করতে পারে যেখানে জেএসওএন পারে না। স্পেসিফিকেশনগুলির ডকুমেন্টেশনের ক্ষেত্রে আমার কাছে এটি একটি বড় সহায়তার বিষয়
মূসা লিয়াও জিজেড

@Accatyyc। আমি মনে করি যে লোকেরা এখানে পার্থক্য সম্পর্কে প্রশ্ন জিজ্ঞাসা করছে এটি একটি নিশ্চিত লক্ষণ ওয়াইএএমএল এত সহজ নয়। আমি কখনই
জেএসএন

15

প্রযুক্তিগতভাবে YAML JSON এর চেয়ে অনেক বেশি অফার করে (YAML v1.2 JSON এর একটি সুপারস্টার):

  • মন্তব্য
  • অ্যাঙ্কর এবং উত্তরাধিকার - 3 অভিন্ন আইটেমের উদাহরণ:

    item1: &anchor_name
      name: Test
      title: Test title
    item2: *anchor_name
    item3:
      <<: *anchor_name
      # You may add extra stuff.
  • ...

বেশিরভাগ সময় লোকেরা এই অতিরিক্ত বৈশিষ্ট্যগুলি ব্যবহার করবে না এবং মূল পার্থক্যটি হ'ল জেএসএন বন্ধনী ব্যবহার করার সময় ওয়াইএএমএল ইনডেন্টেশন ব্যবহার করে । এটি YAML আরও সংক্ষিপ্ত এবং পাঠযোগ্য করে তোলে (প্রশিক্ষিত চোখের জন্য) করে ।

কোনটি বেছে নেবে?

  • YAML অতিরিক্ত বৈশিষ্ট্য এবং সংক্ষিপ্ত স্বরলিপি এটি কনফিগারেশন ফাইলগুলির জন্য একটি ভাল পছন্দ করে তোলে (ব্যবহারকারী নয় এমন ফাইল সরবরাহ করে)।
  • JSON সীমাবদ্ধ বৈশিষ্ট্য, প্রশস্ত সমর্থন এবং দ্রুত পার্সিং এটিকে আন্তঃব্যবহারযোগ্যতা এবং ব্যবহারকারী সরবরাহিত ডেটার জন্য দুর্দান্ত পছন্দ করে তোলে ।

4

যেহেতু এই প্রশ্নটি এখন ওয়াইএএমএল এবং জেএসএন অনুসন্ধান করার সময় বিশিষ্টভাবে বৈশিষ্ট্যযুক্ত, তাই দুটি: লাইসেন্সের মধ্যে খুব কমই একটি উল্লেখযোগ্য পার্থক্য মনে করার মতো worth জেএসওএন এর লাইসেন্স পাওয়ার কথা বলেছে যা জেএসওন ব্যবহারকারীদের অবশ্যই মেনে চলতে হবে (বৈধভাবে দ্ব্যর্থহীন "" দুষ্টের জন্য নয়, ভাল হিসাবে ব্যবহার করা উচিত)। ওয়াইএএমএল এ জাতীয় কোনও লাইসেন্স দাবি বহন করে না এবং এটি একটি গুরুত্বপূর্ণ পার্থক্য হতে পারে (আপনার আইনজীবীর কাছে, যদি না আপনার কাছে থাকে)।


আমি জেএসএন ব্যবহার করি না, আমি জেএসওএন না বলে জেএসএনের ঠিক সমতুল্য ব্যবহার করি। আমি এটিকে পিএস-অফ বলি। আপনি আমাকে ব্যবহার করার জন্য মামলা করছেন { "": #, [] }???
অ্যান্ড্রু

4

কখনও কখনও আপনি অন্য এক জন্য সিদ্ধান্ত নিতে হবে না।

Go এ, উদাহরণস্বরূপ, আপনার একই সাথে উভয় থাকতে পারে:

type Person struct {
    Name string `json:"name" yaml:"name"`
    Age int `json:"age" yaml:"age"`
}

3

থেকে: আরনাড লরেট বই "ওয়েব এপিআই এর ডিজাইন।" :

JSON ডেটা ফর্ম্যাট

জেএসএন হ'ল একটি পাঠ্য ডেটা ফর্ম্যাট যা জাভাস্ক্রিপ্ট প্রোগ্রামিং ভাষা কীভাবে ডেটা বর্ণনা করে তবে এর নাম সত্ত্বেও সম্পূর্ণ ভাষা-স্বতন্ত্র ( https://www.json.org/ দেখুন ) based জেএসএন ব্যবহার করে , আপনি এই চিত্রটিতে প্রদর্শিত হিসাবে, অর্ডারড নাম / মান জোড়া এবং অ্যারে বা অর্ডার করা মানগুলি সহ তালিকাগুলি বর্ণনা করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

কোনও বস্তু কোঁকড়া ধনুর্বন্ধনী ({}) দ্বারা সীমিত করা হয়। একটি নাম একটি উদ্ধৃত স্ট্রিং ("নাম") এবং কোলন (:) দ্বারা এটির মান থেকে পৃথক করা হয়। একটি মান "মান" এর মতো একটি স্ট্রিং, 1.23 এর মতো একটি সংখ্যা, বুলিয়ান (সত্য বা মিথ্যা), নাল মান নাল, একটি বস্তু বা অ্যারের হতে পারে। একটি অ্যারে বন্ধনী ([]) দ্বারা সীমিত করা হয় এবং এর মানগুলি কমা দ্বারা পৃথক করা হয় (,)। তাদেরকে JSON ফর্ম্যাটে সহজে কোনো প্রোগ্রামিং ভাষা ব্যবহার করে পার্স করা হয়। এটি পড়তে এবং লিখতে তুলনামূলকভাবে সহজ। এটি বহু ব্যবহারের জন্য যেমন ডেটাবেস, কনফিগারেশন ফাইল এবং অবশ্যই এপিআইয়ের জন্য ব্যাপকভাবে গৃহীত হয়।

YAML

YAML (YAML মার্কআপ ল্যাঙ্গুয়েজ নয়) একটি মানব-বান্ধব, ডেটা সিরিয়ালাইজেশন ফর্ম্যাট। JSON এর মতো, YAML ( http://yaml.org ) একটি কী / মান ডেটা ফর্ম্যাট। চিত্র দুটির তুলনা দেখায়।

এখানে চিত্র বর্ণনা লিখুন

নিম্নলিখিত বিষয়গুলি নোট করুন:

  • ওয়াইএএমএলে সম্পত্তির নাম এবং মানগুলির আশেপাশে কোনও ডাবল কোট ("") নেই ।

  • জেএসএনের স্ট্রাকচারাল কোঁকড়ানো ধনুর্বন্ধনী ({}) এবং কমা (,) YAML- এ নতুন লাইন এবং ইন্ডেন্টেশন দ্বারা প্রতিস্থাপিত হয়েছে ।

  • অ্যারে বন্ধনী ([]) এবং কমা (,) ড্যাশ (-) এবং ওয়াইএএমএলে নতুন লাইনের দ্বারা প্রতিস্থাপিত হয় ।

  • ভিন্ন তাদেরকে JSON , YAML একটি হ্যাশ চিহ্ন (#) দিয়ে শুরু মন্তব্য করতে পারবেন। এই ফর্ম্যাটগুলির একটির অন্যটিতে রূপান্তর করা তুলনামূলকভাবে সহজ। যদিও forewarned করা, আপনি যখন একটি রূপান্তর মন্তব্য হারাবেন YAML দস্তাবেজের তাদেরকে JSON


0

আমি YAML এবং JSON উভয়ই খুব কার্যকর বলে মনে করি। আমার পক্ষে যখন অন্যটির জন্য একটি ব্যবহৃত হয় তখন কেবলমাত্র দুটি জিনিসই হ'ল ভাষাটি সর্বাধিক জনপ্রিয়তার সাথে ব্যবহৃত হয়। উদাহরণস্বরূপ, আমি যদি জাভা, জাভাস্ক্রিপ্ট ব্যবহার করছি তবে আমি জেএসএন ব্যবহার করব। জাভা এর জন্য, আমি তাদের নিজস্ব বস্তুগুলি ব্যবহার করব, যা বেশ কিছুটা JSON তবে কিছু বৈশিষ্ট্যের অভাব রয়েছে, এবং যদি প্রয়োজন হয় তবে আমি এটি JSON এ প্রথম স্থানে তৈরি করতে JSON এ রূপান্তর করব। আমি এটি করি কারণ এটি জাভার একটি সাধারণ জিনিস এবং অন্য জাভা বিকাশকারীদের আমার কোডটি পরিবর্তন করা সহজ করে তোলে। দ্বিতীয়টি হ'ল আমি প্রোগ্রামটি বৈশিষ্ট্যগুলি মনে রাখার জন্য এটি ব্যবহার করছি, বা প্রোগ্রামটি যদি কোনও কনফিগারেশন ফাইল আকারে নির্দেশনা গ্রহণ করে তবে আমি YAML ব্যবহার করব, কারণ এটি খুব সহজেই মানুষের পঠনযোগ্য, সুন্দর আছে বাক্যবিন্যাস খুঁজছেন এবং সংশোধন করা খুব সহজ, এমনকি YAML কীভাবে কাজ করে তা আপনার কোনও ধারণা না থাকলেও। তারপরে, প্রোগ্রামটি এটি পড়বে এবং এটিকে JSON এ রূপান্তর করবে বা যা ভাষার জন্য পছন্দসই।

শেষ পর্যন্ত, এটি সত্যই কোনও বিষয় নয়। JSON এবং YAML উভয়ই যে কোনও অভিজ্ঞ প্রোগ্রামার দ্বারা সহজেই পড়ে are


-1
  • JSON yML এর তুলনায় বড় ডেটা পরিচালনা করতে পারে না

  • বিভিন্ন মাল্টিমিডিয়া ফর্ম্যাটগুলি পরিচালনা করার জন্য উপযুক্ত নয়।

  • জেএসএনের 'মন্তব্যগুলি' সমর্থন করার কোনও বৈশিষ্ট্য নেই। এটি একা অতিরিক্ত বৈশিষ্ট্য হিসাবে অন্তর্ভুক্ত থাকতে পারে।

  • স্ব-রেফারেন্স, জটিল ডেটাটাইপগুলির জন্য সমর্থন, এমবেডড ব্লক আক্ষরিক, মন্তব্যসমূহ এবং আরও অনেক কিছু এর মতো জেএসএনের চেয়ে ওয়াইএএমএলের কিছু সুবিধা রয়েছে।

  • জেএসএন কেবল পঠনযোগ্য তবে ওয়াইএএমএল পাঠযোগ্য পাশাপাশি সম্পাদনাযোগ্যও হতে পারে।
  • জেএসএন হ'ল ইএমএলএর একটি উপসেট যাতে YAML পার্সাররা JSON পার্স করতে সক্ষম হয়।
  • ওয়াইএএমএল কোনও অতিরিক্ত ডিলিমিটার ব্যবহার করে না, তাই এটি এক্সএমএল এবং জেএসওনের চেয়ে বেশি হালকা ওজন।

"বড় ডেটা" এবং "কেবল পঠনযোগ্য" পয়েন্টগুলির অর্থ কী? JSON একটি ডেটা ফর্ম্যাট, একটি বিমূর্ত ধারণা এই দুটি সীমাবদ্ধতা থাকতে পারে?
জোও ফারিয়াস

4
@ জোওফারিয়স বলুন যে আপনার কাছে 1GB জেএসএন ফাইল এবং 1 জিবি সিএসভি ফাইল রয়েছে এবং আপনার 256 এমবি মেমরি রয়েছে। আপনি সিএসভি ফাইল লাইন এক লাইনে প্রক্রিয়া করতে পারেন, জেএসওএন দিয়ে এটি সহজেই সম্ভব নয়। JSON কে পার্সিং করার চেয়ে লাইন দ্বারা YAML ফাইল লাইনটি পার্স করা সম্ভবত এখনও সহজ।
নেভারইন্ডিংকিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.