Pertanyaan Bisakah komentar digunakan di JSON?


Bisakah saya menggunakan komentar di dalam file JSON? Jika ya, bagaimana caranya?


5777
2017-10-28 20:39


asal


Jawaban:


Tidak.

Semua JSON harus berupa data, dan jika Anda menyertakan komentar, maka itu juga data.

Anda bisa memiliki elemen data yang disebut "_comment" (atau sesuatu) yang akan diabaikan oleh aplikasi yang menggunakan data JSON.

Anda mungkin akan lebih baik memiliki komentar dalam proses yang menghasilkan / menerima JSON, karena mereka seharusnya tahu apa data JSON akan di muka, atau setidaknya struktur itu.

Tetapi jika Anda memutuskan untuk:

{
   "_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"
            }
         }
      }
   }
}

4047
2017-10-28 21:01



Tidak, komentar formulir //… atau /*…*/ tidak diizinkan di JSON. Jawaban ini didasarkan pada:

  • http://www.json.org
  • RFC 4627: Itu application/json Jenis Media untuk Notasi Objek JavaScript (JSON)
  • RFC 7159 Format Interchange Objek JavaScript (JSON) Data - Obsoletes: 4627, 7158

1566
2017-11-15 09:32



Sertakan komentar jika Anda memilih; strip mereka dengan minifier sebelum parsing atau transmisi.

Saya baru saja merilis JSON.minify () yang menghapus komentar dan spasi dari blok JSON dan menjadikannya JSON valid yang dapat diuraikan. Jadi, Anda mungkin menggunakannya seperti:

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

Ketika saya merilisnya, saya mendapat reaksi besar dari orang-orang yang tidak setuju bahkan dengan ide itu, jadi saya memutuskan bahwa saya akan menulis posting blog yang komprehensif tentang mengapa komentar masuk akal di JSON. Ini termasuk komentar penting dari pencipta JSON:

Misalkan Anda menggunakan JSON untuk menyimpan file-file konfigurasi, yang Anda ingin membubuhi keterangan. Silakan dan masukkan semua komentar yang Anda suka. Kemudian, masukkan melalui JSMin sebelum menyerahkannya ke parser JSON Anda. - Douglas Crockford, 2012

Semoga bermanfaat bagi mereka yang tidak setuju dengan alasannya JSON.minify () bisa berguna.


677
2018-06-23 18:20



Komentar telah dihapus dari JSON berdasarkan desain.

Saya menghapus komentar dari JSON karena saya melihat orang-orang menggunakan mereka untuk mengadakan arahan penguraian, sebuah praktik yang akan menghancurkan interoperabilitas. Saya tahu bahwa kurangnya komentar membuat sebagian orang sedih, tetapi seharusnya tidak.

Misalkan Anda menggunakan JSON untuk menyimpan file-file konfigurasi, yang Anda ingin membubuhi keterangan. Silakan dan masukkan semua komentar yang Anda suka. Kemudian, masukkan melalui JSMin sebelum menyerahkannya ke parser JSON Anda.

Sumber: Pernyataan publik oleh Douglas Crockford tentang G +


378
2018-06-11 08:52



DISCLAIMER: JAMINAN ANDA ADALAH BATAL

Seperti yang telah ditunjukkan, peretasan ini memanfaatkan penerapan spesifikasi. Tidak semua parser JSON akan memahami JSON semacam ini. Parser streaming khususnya akan tersedak.

Ini adalah rasa ingin tahu yang menarik, tetapi Anda benar-benar tidak boleh menggunakannya untuk apa pun. Di bawah ini adalah jawaban asli.


Saya menemukan sedikit peretasan yang memungkinkan Anda menempatkan komentar di file JSON yang tidak akan memengaruhi penguraian, atau mengubah data yang diwakili dengan cara apa pun.

Tampaknya ketika mendeklarasikan objek literal Anda dapat menentukan dua nilai dengan kunci yang sama, dan yang terakhir diutamakan. Percaya atau tidak, ternyata parser JSON bekerja dengan cara yang sama. Jadi kita bisa menggunakan ini untuk membuat komentar di sumber JSON yang tidak akan hadir dalam representasi obyek yang diuraikan.

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

Jika kami menerapkan teknik ini, file JSON Anda yang dikomentari mungkin terlihat seperti ini:

{
  "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]
}

Kode di atas adalah JSON yang valid. Jika Anda menguraikannya, Anda akan mendapatkan objek seperti ini:

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

Yang berarti tidak ada jejak komentar, dan mereka tidak akan memiliki efek samping yang aneh.

Selamat meretas!


192
2017-08-02 13:46



JSON tidak mendukung komentar. Itu juga tidak pernah dimaksudkan untuk digunakan untuk file konfigurasi di mana komentar akan dibutuhkan.

Hjson adalah format file konfigurasi untuk manusia. Sintaksis yang santai, lebih sedikit kesalahan, lebih banyak komentar.

Hjson intro

Lihat hjson.org untuk JavaScript, Java, Python, PHP, Rust, Go, Ruby, dan C # libraries.


123
2018-03-20 15:26



Anda tidak bisa. Setidaknya itulah pengalaman saya dari sekilas json.org.

JSON memiliki sintaksis yang divisualisasikan pada halaman itu. Tidak ada catatan tentang komentar.


95
2017-10-28 20:42



Pertimbangkan untuk menggunakan YAML. Ini hampir superset dari JSON (hampir semua JSON valid adalah valid YAML) dan ini memungkinkan komentar.


86
2017-08-31 02:24



Anda harus menulis a Skema JSON sebagai gantinya. Skema JSON saat ini merupakan spesifikasi draf Internet yang diusulkan. Selain dokumentasi, skema juga dapat digunakan untuk memvalidasi data JSON Anda.

Contoh:

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

Anda dapat memberikan dokumentasi dengan menggunakan deskripsi atribut skema.


55
2017-07-28 18:38



Jika Anda menggunakan Jackson sebagai parser JSON Anda, ini adalah cara Anda mengaktifkannya untuk mengizinkan komentar:

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

Maka Anda dapat memiliki komentar seperti ini:

{
  key: "value" // comment
}

Dan Anda juga dapat memiliki komentar yang dimulai dengan # dengan pengaturan:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);    

Tetapi secara umum (seperti dijawab sebelumnya) spek tidak mengizinkan komentar.


51
2018-02-06 20:44



Komentar bukan standar resmi. Meskipun beberapa parser mendukung komentar C-style. Salah satu yang saya gunakan adalah JsonCpp. Dalam contoh-contoh ada yang ini:

// 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 tidak memvalidasi ini. Jadi komentar adalah ekstensi khusus parser dan bukan standar.

Parser lainnya adalah JSON5.

Sebuah alternatif untuk JSON TOML.


49
2017-10-26 09:46