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


Answers

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

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

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




أنا مجرد مواجهة هذا لملفات التكوين. لا أريد استخدام XML (مطول أو بياني أو قبيح أو صعب القراءة) أو تنسيق "ini" (لا تسلسل هرمي أو معيار حقيقي ، إلخ) أو تنسيق "خصائص" جافا (مثل .ini).

تستطيع JSON القيام بكل ما يمكنها فعله ، ولكنها طريقة أقل وضوحا وقابلية للقراءة أكثر - والمحللون سهلون ومتواجدين في العديد من اللغات. انها مجرد شجرة البيانات. لكن التعليقات خارج النطاق ضرورية في كثير من الأحيان لتوثيق تكوينات "افتراضية" وما شابه. لا يجب أن تكون التهيئات "مستندات كاملة" أبدًا ، ولكن أشجار البيانات المحفوظة التي يمكن أن تكون مقروءة للإنسان عند الحاجة.

أعتقد أنه يمكن استخدام "#": "comment" ، لـ JSON "صالح".




عذرًا ، لا يمكننا استخدام التعليقات في JSON ... راجع الرسم التوضيحي لبناء الجملة لـ JSON على JSON.org .

يقول Douglas Crockford " plus.google.com/118095276221607585885/posts/RK8qyGVaGSr ":

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

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




If you use JSON5 you can include comments.

JSON5 is a proposed extension to JSON that aims to make it easier for humans to write and maintain by hand. It does this by adding some minimal syntax features directly from ECMAScript 5.




To cut a JSON item into parts I add "dummy comment" lines:

{

"#############################" : "Part1",

"data1"             : "value1",
"data2"             : "value2",

"#############################" : "Part2",

"data4"             : "value3",
"data3"             : "value4"

}



We are using strip-json-comments for our project. It supports something like:

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

Simply npm install --save strip-json-comments to install and use it like:

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



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




التعليقات ليست معيارا رسميا. على الرغم من أن بعض المحللين يدعمون C- نمط التعليقات. واحد أستخدمه هو JsonCpp . في الأمثلة هناك هذا واحد:

// Configuration options
{
    // Default encoding for text
    "encoding" : "UTF-8",

    // Plug-ins loaded at start-up
    "plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],

    // Tab indent size
    "indent" : { "length" : 3, "use_space": true }
}

jsonlint لا يتحقق من صحة ذلك. لذا ، فإن التعليقات عبارة عن امتداد محدد ومحدد وليس قياسيًا.

محلل آخر هو JSON5 .

بديل ل JSON TOML .




You can use JSON with comments in it, if you load it as a text file, and then remove comments from it.

يمكنك استخدام مكتبة decomment لذلك. أدناه مثال كامل.

إدخال JSON (ملف input.js):

/*
* multi-line comments
**/
{
    "value": 123 // one-line comment
}

اختبار التطبيق:

var decomment = require('decomment');
var fs = require('fs');

fs.readFile('input.js', 'utf8', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        var text = decomment(data); // removing comments
        var json = JSON.parse(text); // parsing JSON
        console.log(json);
    }
});

انتاج:

{ value: 123 }

انظر أيضا: gulp-decomment ، grunt-decomment




إليك ما وجدته في وثائق 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 لا يدعم التعليقات. كما أنه لم يقصد استخدامه مطلقًا في ملفات التكوين حيث ستكون هناك حاجة للتعليقات.

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

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




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

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

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

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




You can have comments in JSONP , but not in pure JSON. I've just spent an hour trying to make my program work with this example from Highcharts: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?

If you follow the link, you will see

?(/* AAPL historical OHLC data from the Google Finance API */
[
/* May 2006 */
[1147651200000,67.79],
[1147737600000,64.98],
...
[1368057600000,456.77],
[1368144000000,452.97]
]);

Since I had a similar file in my local folder, there were no issues with the Same-origin policy , so I decided to use pure JSON... and, of course, $.getJSON was failing silently because of the comments.

Eventually I just sent a manual HTTP request to the address above and realized that the content-type was text/javascript since, well, JSONP returns pure JavaScript. In this case comments are allowed . But my application returned content-type application/json , so I had to remove the comments.




JSON makes a lot of sense for config files and other local usage because it's ubiquitous and because it's much simpler than XML.

If people have strong reasons against having comments in JSON when communicating data (whether valid or not), then possibly JSON could be split into two:

  • JSON-COM: JSON on the wire, or rules that apply when communicating JSON data.
  • JSON-DOC: JSON document, or JSON in files or locally. Rules that define a valid JSON document.

JSON-DOC will allow comments, and other minor differences might exist such as handling whitespace. Parsers can easily convert from one spec to the other.

With regards to the plus.google.com/118095276221607585885/posts/RK8qyGVaGSr made by Douglas Crockford on this issues (referenced by @Artur Czajka)

Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

We're talking about a generic config file issue (cross language/platform), and he's answering with a JS specific utility!

Sure a JSON specific minify can be implemented in any language, but standardize this so it becomes ubiquitous across parsers in all languages and platforms so people stop wasting their time lacking the feature because they have good use-cases for it, looking the issue up in online forums, and getting people telling them it's a bad idea or suggesting it's easy to implement stripping comments out of text files.

The other issue is interoperability. Suppose you have a library or API or any kind of subsystem which has some config or data files associated with it. And this subsystem is to be accessed from different languages. Then do you go about telling people: by the way don't forget to strip out the comments from the JSON files before passing them to the parser!




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

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

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

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




Related