comments هل يمكن استخدام التعليقات في JSON؟





15 Answers

لا ، لا يُسمح بتعليقات النموذج //… أو /*…*/ في JSON. تعتمد هذه الإجابة على:

  • http://www.json.org
  • RFC 4627 : نوع وسائط application/json كائن JavaScript (JSON)
  • RFC 7159 تنسيق تبادل بيانات عناصر كائن JavaScript (JSON) - عفا عليها الزمن: 4627 ، 7158
json comments

هل يمكنني استخدام التعليقات داخل ملف JSON؟ إذا كان الأمر كذلك ، كيف؟




تمت إزالة التعليقات من JSON حسب التصميم.

أزلت التعليقات من JSON لأنني رأيت أشخاصًا يستخدمونها لتنفيذ توجيهات إعراب ، وهي ممارسة كان من شأنها أن تدمر قابلية التشغيل البيني. أعلم أن قلة التعليقات تجعل بعض الناس حزينين ، لكن لا ينبغي أن يكون ذلك.

لنفترض أنك تستخدم JSON للاحتفاظ بملفات التهيئة ، التي ترغب في إضافة تعليقات إليها. المضي قدما وإدراج جميع التعليقات التي تريدها. ثم قم بتوصيله عبر JSMin قبل تسليمه إلى محلل JSON الخاص بك.

المصدر: plus.google.com/118095276221607585885/posts/RK8qyGVaGSr




JSON لا يدعم التعليقات. كما أنه لم يقصد استخدامه مطلقًا في ملفات التكوين حيث ستكون هناك حاجة للتعليقات.

Hjson هو تنسيق ملف التكوين للبشر. بناء الجملة استرخاء ، وأخطاء أقل ، المزيد من التعليقات.

يمكنك الاطلاع على hjson.org في مكتبات JavaScript و Java و Python و PHP و Rust و Go و Ruby و C #.




فكر في استخدام YAML. إنها عبارة عن مجموعة شاملة من JSON (كل JSON الصالحة تقريبًا صالحة لـ YAML) وتسمح بالتعليقات.




إذا كنت تستخدم Jackson كمحلل JSON الخاص بك ، فهذا هو كيفية تمكينه للسماح بالتعليقات:

ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);

ثم يمكنك الحصول على تعليقات مثل هذا:

{
  key: "value" // Comment
}

ويمكنك أيضًا إضافة تعليقات تبدأ بـ # عن طريق الإعداد:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

ولكن بشكل عام (كما ورد من قبل) فإن المواصفات لا تسمح بالتعليقات.




إليك ما وجدته في وثائق Google Firebase التي تسمح لك بوضع التعليقات في JSON:

{
  "//": "Some browsers will use this to enable push notifications.",
  "//": "It is the same for all projects, this is not your project's sender ID",
  "gcm_sender_id": "1234567890"
}



إذا كان ملف النص الخاص بك ، والذي هو عبارة عن سلسلة JSON ، سيتم قراءته بواسطة بعض البرامج ، فما مدى صعوبة إلغاء تعليقات نمط C أو C ++ قبل استخدامه؟

الجواب: سيكون من بطانة واحدة. إذا قمت بذلك ، فيمكن استخدام ملفات JSON كملفات تهيئة.




الفكرة وراء JSON هي توفير تبادل بيانات بسيط بين التطبيقات. هذه عادةً ما تستند إلى الويب واللغة هي JavaScript.

لا يسمح في الواقع بالتعليقات على هذا النحو ، ومع ذلك ، تمرير تعليق كواحد من أزواج الاسم / القيمة في البيانات ستعمل بالتأكيد ، على الرغم من أنه من الواضح أن هذه البيانات تحتاج إلى تجاهلها أو معالجتها بالتحديد من خلال قانون التحليل.

كل ما يقال ، ليس المقصود أن يحتوي ملف JSON على تعليقات بالمعنى التقليدي. يجب أن يكون مجرد البيانات.

إلقاء نظرة على موقع JSON لمزيد من التفاصيل.




لا تدعم JSON التعليقات بشكل أصلي ، ولكن يمكنك إنشاء أداة فك التشفير الخاصة بك أو على الأقل من قبل المعالج لتجريد التعليقات ، فهذا أمر جيد تمامًا (طالما أنك تتجاهل التعليقات ولا تستخدمها لتوجيه كيفية معالجة تطبيقك لبيانات JSON ).

ليس لدى JSON أي تعليقات. يجب ألا يصدر برنامج تشفير JSON تعليقات. قد تقبل أداة فك تشفير JSON التعليقات وتجاهلها.

لا ينبغي أبدا استخدام التعليقات لنقل أي شيء ذي مغزى. هذا هو ما هو JSON.

Cf: دوغلاس كروكفورد ، مؤلف كتاب JSON spec .




JSON يجعل الكثير من المعنى لملفات التهيئة والاستخدام المحلي الآخر لأنه في كل مكان ولأنه أبسط بكثير من XML.

إذا كان لدى الأشخاص أسباب قوية لعدم وجود تعليقات في JSON عند توصيل البيانات (سواء كانت صحيحة أم لا) ، فحينئذٍ يمكن تقسيم JSON إلى قسمين:

  • JSON-COM: JSON على السلك ، أو القواعد التي تنطبق عند توصيل بيانات JSON.
  • JSON-DOC: مستند JSON أو JSON في ملفات أو محليًا. القواعد التي تحدد وثيقة JSON صالحة.

سيسمح JSON-DOC بالتعليقات ، وقد توجد اختلافات طفيفة أخرى مثل التعامل مع المسافات البيضاء. يمكن للمحللين التحويل بسهولة من أحد المواصفات إلى الآخر.

فيما يتعلق plus.google.com/118095276221607585885/posts/RK8qyGVaGSr التي أدلى بها دوغلاس كروكفورد حول هذه القضايا (المشار إليها بواسطةArtur Czajka)

لنفترض أنك تستخدم JSON للاحتفاظ بملفات التهيئة ، التي ترغب في إضافة تعليقات إليها. المضي قدما وإدراج جميع التعليقات التي تريدها. ثم قم بتوصيله عبر JSMin قبل تسليمه إلى محلل JSON الخاص بك.

نحن نتحدث عن مشكلة عامة في ملف التهيئة (اللغة المتقاطعة / المنصة) ، وهو يرد باستخدام أداة JS محددة!

بالتأكيد يمكن تنفيذ تعديل محدد JSON بأي لغة ، ولكن توحيد هذا بحيث يصبح في كل مكان عبر موزعي جميع اللغات والمنصات بحيث يتوقف الناس عن إضاعة وقتهم يفتقر إلى الميزة لأن لديهم حالات استخدام جيدة لها ، وتبحث عن المشكلة في المنتديات عبر الإنترنت ، والحصول على أشخاص يخبرونهم أنها فكرة سيئة أو تشير إلى أنه من السهل تنفيذ تعليقات تجريد من الملفات النصية.

القضية الأخرى هي التشغيل المتداخل. لنفترض أن لديك مكتبة أو واجهة برمجة تطبيقات أو أي نوع فرعي يحتوي على بعض ملفات التهيئة أو البيانات المرتبطة به. ويتم الوصول إلى هذا النظام الفرعي من لغات مختلفة. ثم تذهب عن إخبار الناس: بالمناسبة لا تنسوا إزالة التعليقات من ملفات JSON قبل تمريرها إلى المحلل اللغوي!




إذا كنت تستخدم JSON5 فيمكنك تضمين التعليقات.

JSON5 هو ملحق مقترح لـ JSON يهدف إلى تسهيل عملية الكتابة باليد البشرية والحفاظ عليها. يفعل ذلك عن طريق إضافة بعض ميزات بناء الجملة الحد الأدنى مباشرة من ECMAScript 5.




JSON ليس بروتوكولًا مؤطرًا . إنه تنسيق لغة خالية . لذلك لم يتم تعريف تنسيق التعليقات لـ JSON.

كما اقترح العديد من الأشخاص ، هناك بعض الحيل ، على سبيل المثال ، مفاتيح مكررة أو مفتاح محدد _commentيمكنك استخدامه. الأمر متروك لك.




نحن نستخدم strip-json-commentsلمشروعنا. يدعم شيئًا مثل:

/*
 * Description 
*/
{
    // rainbows
    "unicorn": /* ❤ */ "cake"
}

ببساطة npm install --save strip-json-commentsلتركيب واستخدامها مثل:

var strip_json_comments = require('strip-json-comments')
var json = '{/*rainbows*/"unicorn":"cake"}';
JSON.parse(strip_json_comments(json));
//=> {unicorn: 'cake'}



هناك حل جيد (الاختراق) ، وهو JSON صالح. مجرد جعل نفس المفتاح مرتين (أو أكثر). فمثلا:

{
  "param" : "This is the comment place",
  "param" : "This is value place",
}

لذلك ستفهم JSON ذلك على النحو التالي:

{
  "param" : "This is value place",
}



تنهد. لماذا لا نضيف فقط الحقول ، على سبيل المثال

{
    "note1" : "This demonstrates the provision of annotations within a JSON file",
    "field1" : 12,
    "field2" : "some text",

    "note2" : "Add more annotations as necessary"
}

فقط تأكد من عدم تعارض أسماء "notex" الخاصة بك مع أي حقول حقيقية.




Related