comments json註解 - 可以在JSON中使用註釋嗎?



15 Answers

,JSON中不允許使用//…/*…*/形式的註釋。 這個答案基於:

  • http://www.json.org
  • RFC 4627 :JavaScript對象表示法的application/json媒體類型(JSON)
  • RFC 7159 JavaScript對象表示法(JSON)數據交換格式 - 已廢棄:4627,7158
json comments

我可以在JSON文件中使用註釋嗎? 如果是這樣,怎麼樣?




評論已從JSON中刪除。

我從JSON中刪除了註釋,因為我看到有人使用它們來保存解析指令,這種做法會破壞互操作性。 我知道缺乏評論會讓一些人感到悲傷,但事實並非如此。

假設您使用JSON來保留要註釋的配置文件。 繼續,插入您喜歡的所有評論。 然後通過JSMin將其傳遞給JSON解析器。

資料來源: plus.google.com/118095276221607585885/posts/RK8qyGVaGSr




JSON不支持評論。 它也從未打算用於需要註釋的配置文件。

Hjson是人類的配置文件格式。 輕鬆的語法,更少的錯誤,更多的評論。

有關JavaScript,Java,Python,PHP,Rust,Go,Ruby和C#庫的信息,請參閱hjson.org




考慮使用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背後的想法是在應用程序之間提供簡單的數據交換。 這些通常是基於Web的,語言是JavaScript。

它並不真正允許這樣的註釋,但是,將註釋作為數據中的一個名稱/值對傳遞肯定會起作用,儘管顯然需要忽略該數據或由解析代碼專門處理。

總而言之,JSON文件不應該包含傳統意義上的註釋。 它應該只是數據。

有關更多詳細信息,請查看JSON網站




JSON本身不支持註釋,但您可以創建自己的解碼器或至少預處理器來刪除註釋,這非常好(只要您忽略註釋並且不使用它們來指導您的應用程序應如何處理JSON數據)。

JSON沒有評論。 JSON編碼器不得輸出註釋。 JSON解碼器可以接受和忽略註釋。

絕不應該使用註釋來傳輸任何有意義的內容。這就是JSON的用途。

Cf:Douglas Crockford,JSON規範的作者




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特定的minify可以用任何語言實現,但是標準化,因此它在所有語言和平台的解析器中變得無處不在,所以人們不再浪費他們的時間缺乏這個功能,因為他們有很好的用例,查看問題在線論壇,並讓人們告訴他們這是一個壞主意或建議很容易實現從文本文件剝離評論。

另一個問題是互操作性。假設您有一個庫或API或任何類型的子系統,其中包含一些與之關聯的配置或數據文件。這個子系統可以從不同的語言訪問。然後你去告訴別人:順便說一下,在將它們傳遞給解析器之前,不要忘記從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'}



有一個很好的解決方案(hack),它是有效的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