মন্তব্য JSON ব্যবহার করা যেতে পারে?




comments (20)

Disclaimer: আপনার ওয়্যারেন্টি ভয়েড হয়

হিসাবে নির্দিষ্ট করা হয়েছে, এই হ্যাক spe প্রয়োগ বাস্তবায়ন লাগে। সব JSON পার্সোনা JSON এই ধরণের বুঝতে হবে না। বিশেষভাবে স্ট্রিমিং পার্সার choke হবে।

এটি একটি আকর্ষণীয় কৌতূহল, তবে আপনাকে অবশ্যই এটির জন্য কিছু ব্যবহার করা উচিত নয় । নীচে মূল উত্তর।

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

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

({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length; 
// => 1

আমরা যদি এই কৌশলটি প্রয়োগ করি তবে আপনার মন্তব্য করা JSON ফাইলটি এইরকম হতে পারে:

{
  "api_host" : "The hostname of your API server. You may also specify the port.",
  "api_host" : "hodorhodor.com",

  "retry_interval" : "The interval in seconds between retrying failed API calls",
  "retry_interval" : 10,

  "auth_token" : "The authentication token. It is available in your developer dashboard under 'Settings'",
  "auth_token" : "5ad0eb93697215bc0d48a7b69aa6fb8b",

  "favorite_numbers": "An array containing my all-time favorite numbers",
  "favorite_numbers": [19, 13, 53]
}

উপরের কোড বৈধ JSON হয় । যদি আপনি এটি বিশ্লেষণ করেন, তবে আপনি এটির মতো একটি বস্তু পাবেন:

{
    "api_host": "hodorhodor.com",
    "retry_interval": 10,
    "auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
    "favorite_numbers": [19,13,53]
}

এর অর্থ কোন মন্তব্য নেই এবং তাদের অদ্ভুত পার্শ্বপ্রতিক্রিয়া থাকবে না।

শুভ হ্যাকিং!

আমি একটি JSON ফাইলের ভিতরে মন্তব্য ব্যবহার করতে পারেন? যদি তাই হয়, কিভাবে?


JSON পিছনে ধারণা অ্যাপ্লিকেশন মধ্যে সহজ তথ্য বিনিময় প্রদান করা হয়। এই সাধারণত ওয়েব ভিত্তিক এবং ভাষা জাভাস্ক্রিপ্ট হয়।

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

যে সব বলেন, JSON ফাইল ঐতিহ্যগত অর্থে মন্তব্য থাকতে হবে যে অভিপ্রায় নয়। এটা শুধু তথ্য হতে হবে।

আরো বিস্তারিত জানার জন্য JSON ওয়েবসাইট দেখুন।


YAML ব্যবহার বিবেচনা করুন। এটি প্রায় JSON এর একটি সুপারসেট (কার্যত সমস্ত বৈধ JSON বৈধ YAML) এবং এটি মন্তব্যের অনুমতি দেয়।


আপনি পরিবর্তে একটি JSON স্কিমা লিখতে হবে। JSON স্কিমা বর্তমানে একটি প্রস্তাবিত ইন্টারনেট খসড়া স্পেসিফিকেশন। ডকুমেন্টেশন ছাড়াও, আপনার JSON ডেটা যাচাই করার জন্য স্কিমা ব্যবহার করা যেতে পারে।

উদাহরণ:

{
    "description":"A person",
    "type":"object",
    "properties":
        {
            "name":
                {
                    "type":"string"
                },
            "age":
                {
                    "type":"integer",
                    "maximum":125
                }
        }
}

আপনি বিবরণ স্কিমা বৈশিষ্ট্য ব্যবহার করে ডকুমেন্টেশন প্রদান করতে পারেন।


আমি শুধু কনফিগারেশন ফাইলের জন্য এই সম্মুখীন। আমি এক্সএমএল (ক্রিয়াপদ, গ্রাফিকাল, কুশ্রী, পড়ার জন্য কঠিন), বা "ini" বিন্যাস (কোন অনুক্রম, কোনও বাস্তব মান, ইত্যাদি) বা জাভা "প্রোপার্টি" ফর্ম্যাট (যেমন .ini) ব্যবহার করতে চাই না।

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

আমার মনে হয় কেউ "বৈধ" JSON এর জন্য " "#": "comment" ব্যবহার করতে পারে।


তুমি পারবে না অন্তত এটি JSON.org এ দ্রুত নজর থেকে আমার অভিজ্ঞতা।

JSON যে পৃষ্ঠায় visualized তার সিনট্যাক্স আছে। মন্তব্য সম্পর্কে কোন নোট নেই।


না।

JSON সমস্ত তথ্য থাকা উচিত এবং যদি আপনি একটি মন্তব্য অন্তর্ভুক্ত করেন তবে এটিও ডেটা হবে।

আপনি "_comment" (বা কিছু) নামক একটি নির্দিষ্ট ডেটা উপাদান থাকতে পারে যা JSON ডেটা ব্যবহার করে এমন অ্যাপ্লিকেশনগুলি উপেক্ষা করবে।

আপনি সম্ভবত JSON জেনারেট করে / পেয়ে যাচ্ছেন এমন প্রক্রিয়াগুলির মধ্যে মন্তব্যটি ভালভাবেই ভাল হবে, কারণ তারা জানত যে JSON ডেটা অগ্রিম হবে কিনা, বা অন্তত এটির গঠন।

কিন্তু আপনি যদি সিদ্ধান্ত নিলেন:

{
   "_comment": "comment text goes here...",
   "glossary": {
      "title": "example glossary",
      "GlossDiv": {
         "title": "S",
         "GlossList": {
            "GlossEntry": {
               "ID": "SGML",
               "SortAs": "SGML",
               "GlossTerm": "Standard Generalized Markup Language",
               "Acronym": "SGML",
               "Abbrev": "ISO 8879:1986",
               "GlossDef": {
                  "para": "A meta-markup language, used to create markup languages such as DocBook.",
                  "GlossSeeAlso": ["GML", "XML"]
               },
               "GlossSee": "markup"
            }
         }
      }
   }
}

মন্তব্য একটি সরকারী মান হয় না। যদিও কিছু পসার সি-স্টাইল মন্তব্য সমর্থন করে। আমি যে একটি ব্যবহার 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 একটি বিকল্প।


যদি আপনার পাঠ্য ফাইল, যা একটি JSON স্ট্রিং হয়, কিছু প্রোগ্রাম দ্বারা পড়তে যাচ্ছে, এটি ব্যবহার করার আগে সি বা সি ++ স্টাইল মন্তব্যগুলি কীভাবে বের করা কত কঠিন হবে?

উত্তর: এটি একটি মাছ ধরার নৌকা হতে হবে। যদি আপনি এটি করেন তবে JSON ফাইলগুলি কনফিগারেশন ফাইল হিসাবে ব্যবহার করা যেতে পারে।


যদি আপনি Jackson আপনার JSON পার্সার হিসাবে ব্যবহার করেন তবে এইভাবে মন্তব্য করার জন্য আপনি কীভাবে এটি সক্ষম করেন:

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

তারপর আপনি এই মত মন্তব্য করতে পারেন:

{
  key: "value" // Comment
}

এবং আপনি এই সেটিংটি # দিয়ে শুরু করতে পারেন:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

কিন্তু সাধারণভাবে (আগে উত্তর দেওয়া হয়েছে) স্পেসিফিকেশন মন্তব্য করার অনুমতি দেয় না।


JSON একটি প্রণয়ন প্রোটোকল নয় । এটি একটি ভাষা মুক্ত বিন্যাস । সুতরাং একটি মন্তব্য এর বিন্যাস JSON জন্য সংজ্ঞায়িত করা হয় না।

অনেক মানুষ যেমন প্রস্তাব করেছেন, সেখানে কিছু কৌশল রয়েছে, উদাহরণস্বরূপ, সদৃশ কী বা নির্দিষ্ট কী _commentযা আপনি ব্যবহার করতে পারেন। এটা আপনার উপর নির্ভর করছে.


আপনি চয়ন যদি মন্তব্য অন্তর্ভুক্ত করুন; পার্সিং বা প্রেরণ করার আগে একটি মিনিয়ারিফায়ার সঙ্গে তাদের ফালা।

আমি JSON.minify() JSON এর একটি ব্লক থেকে মন্তব্য এবং হোয়াইট স্পেস ছেড়ে JSON.minify() ছেড়ে JSON.minify() এবং এটি বৈধ JSON তৈরি করে যা পার্স করা যেতে পারে। সুতরাং, আপনি এটি ব্যবহার করতে পারেন:

JSON.parse(JSON.minify(my_str));

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

ধরুন আপনি কনফিগারেশন ফাইলগুলি রাখতে JSON ব্যবহার করছেন, যা আপনি এনটাইটেট করতে চান। এগিয়ে যান এবং আপনি চান সব মন্তব্য সন্নিবেশ করান। তারপরে JSMin এর মাধ্যমে এটি আপনার JSON পার্সারে হস্তান্তর করার আগে এটি পাইপ করুন। - plus.google.com/118095276221607585885/posts/RK8qyGVaGSr

আশা করি এটি JSON.minify () কে কাজে লাগাতে পারে এমন বিষয়ে অসম্মতি জানানোর জন্য সহায়ক।


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

JSON মন্তব্য নেই। একটি JSON এনকোডার অবশ্যই আউটপুট মন্তব্য করতে হবে না। একটি JSON ডিকোডার মন্তব্য গ্রহণ এবং উপেক্ষা করতে পারে।

মন্তব্য অর্থপূর্ণ কিছু প্রেরণ করার জন্য ব্যবহার করা উচিত নয়। যে JSON জন্য কি।

সিএফ: ডগলাস ক্রকফোর্ড, JSON স্পিকার লেখক


অংশে একটি JSON আইটেম কাটা আমি "ডামি মন্তব্য" লাইন যোগ করুন:

{

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

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

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

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

}

JSON এর লেখক আমাদের JSON এ মন্তব্য অন্তর্ভুক্ত করতে চায়, তবে তাদের বিশ্লেষণ করার আগে তাদের খুঁজে বের করুন (দেখুন মাইকেল Burr দ্বারা উপলব্ধ plus.google.com/118095276221607585885/posts/RK8qyGVaGSr দেখুন )। যদি JSON মন্তব্য করা উচিত, কেন তাদের মানানসই করবেন না, এবং JSON পার্সারকে কাজটি করতে দেবেন? আমি সেখানে যুক্ত যুক্তি সঙ্গে একমত না, কিন্তু, হায়, যে মান। অন্যদের দ্বারা প্রস্তাবিত হিসাবে একটি YAML সমাধান ব্যবহার করে ভাল, কিন্তু এটি একটি লাইব্রেরি নির্ভরতা প্রয়োজন।

আপনি যদি মন্তব্যগুলি বন্ধ করতে চান, তবে লাইব্রেরি নির্ভরতা না চান তবে এখানে একটি দুই-লাইন সমাধান রয়েছে যা C ++ - শৈলী মন্তব্যগুলির জন্য কাজ করে তবে এটি অন্যদের কাছে অভিযোজিত হতে পারে:

var comments = new RegExp("//.*", 'mg');
data = JSON.parse(fs.readFileSync(sample_file, 'utf8').replace(comments, ''));

উল্লেখ্য যে এই সমাধানটি শুধুমাত্র সেই ক্ষেত্রে ব্যবহার করা যেতে পারে যেখানে আপনি নিশ্চিত হতে পারেন যে JSON ডেটাতে মন্তব্যকারীর অন্তর্ভুক্ত নেই, যেমন ('//')।

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

data = require(fs.realpathSync(doctree_fp));

আপনি JSONP মন্তব্য করতে পারেন , তবে বিশুদ্ধ JSON তে নয়। আমি হাইচার্টস থেকে এই উদাহরণ দিয়ে আমার প্রোগ্রামটি কাজ করার জন্য একটি ঘন্টা অতিবাহিত করেছি: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?JSONPhttp://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?

আপনি লিঙ্ক অনুসরণ করলে, আপনি দেখতে পাবেন

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

যেহেতু আমার স্থানীয় ফোল্ডারেও একই রকম ফাইল ছিল তাই একই মূলনীতির কোনো সমস্যা ছিল না , তাই আমি বিশুদ্ধ JSON ব্যবহার করার সিদ্ধান্ত নিয়েছিলাম ... অবশ্যই, $.getJSONমন্তব্যের কারণে নীরবভাবে ব্যর্থ হয়েছিল।

অবশেষে আমি উপরের ঠিকানায় একটি ম্যানুয়াল HTTP অনুরোধ প্রেরণ করেছি এবং বুঝতে পেরেছি যে সামগ্রী-ধরনটি তখন text/javascriptথেকেই ছিল , ভাল, JSONP বিশুদ্ধ জাভাস্ক্রিপ্টটি ফেরত দেয়। এই ক্ষেত্রে মন্তব্য অনুমতি দেওয়া হয় । কিন্তু আমার আবেদন কন্টেন্ট টাইপ ফিরে application/json, তাই আমি মন্তব্য মুছে ফেলতে ছিল।


আমরা 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",
}

এটি একটি "আপনি পারেন" প্রশ্ন। এবং এখানে একটি "হ্যাঁ" উত্তর।

না, আপনি একটি JSON এনকোডিংয়ের পাশাপাশি পার্শ্ব চ্যানেলের ডেটা স্টাফ করার জন্য সদৃশ বস্তুর সদস্য ব্যবহার করতে পারবেন না। ( RFC তে "একটি বস্তুর মধ্যে থাকা নামগুলি অনন্য হওয়া উচিত" দেখুন )।

এবং হ্যাঁ, আপনি JSON এর চারপাশে মন্তব্য সন্নিবেশ করতে পারেন , যা আপনি পার্স আউট করতে পারেন।

কিন্তু যদি আপনি কোনও বৈধ JSON এ ইচ্ছাকৃত পার্শ্ব-চ্যানেলের তথ্য সন্নিবেশ এবং বের করার উপায় চান তবে এখানে একটি উত্তর দেওয়া আছে। আমরা JSON এনকোডিংয়ের ডেটা অ-অনন্য প্রতিনিধিত্বের সুবিধা গ্রহণ করি। এই অনুমতিটি * RFC এর দ্বিতীয় বিভাগে "হোয়াইট স্পেসের ছয় কাঠামোগত অক্ষরগুলির আগে বা পরে অনুমতি দেওয়া হয়েছে"।

* আরএফসি শুধুমাত্র "হোয়াইটস্পেসটিকে ছয় কাঠামোগত অক্ষরের আগে বা পরে অনুমতি দেয়", স্পষ্টভাবে স্ট্রিং, সংখ্যা, "মিথ্যা", "সত্য" এবং "নাল" উল্লেখ করে। এই বিচ্ছেদ সব বাস্তবায়নের মধ্যে উপেক্ষা করা হয়।

প্রথমে, এটি minifying করে আপনার JSON ক্যানোনিকালাইজ করুন:

$jsonMin = json_encode(json_decode($json));

তারপর বাইনারি আপনার মন্তব্য এনকোড করুন:

$hex = unpack('H*', $comment);
$commentBinary = base_convert($hex[1], 16, 2);

তারপর আপনার বাইনারি steig:

$steg = str_replace('0', ' ', $commentBinary);
$steg = str_replace('1', "\t", $steg);

এখানে আপনার আউটপুট:

$jsonWithComment = $steg . $jsonMin;

দীর্ঘশ্বাস. কেন শুধু ক্ষেত্র যোগ করুন, উদাহরণস্বরূপ

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

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

শুধু আপনার "notex" নামগুলি যে কোনও বাস্তব ক্ষেত্রগুলির সাথে দ্বন্দ্ব না করে তা নিশ্চিত করুন।







comments