ความคิดเห็นสามารถใช้ใน JSON ได้หรือไม่


7607

ฉันสามารถใช้ความคิดเห็นภายในไฟล์ JSON ได้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร


153
@StingyJack: เพื่ออธิบายสิ่งต่าง ๆ ที่อาจไม่ชัดเจนหรืออะไรก็ตามที่คนอื่นอาจแสดงความคิดเห็น ฉันหนึ่งมักจะมีความคิดเห็นในไฟล์ข้อมูล XML, ไฟล์ ini และรูปแบบอื่น ๆ รวมถึงข้อกำหนดสำหรับความคิดเห็น
Michael Burr

24
หากคุณเช่นฉันกำลังสงสัยว่า//commentsตกลงสำหรับการใช้งานเฉพาะของไฟล์กำหนดค่า Sublime Text หรือไม่คำตอบคือใช่ (เหมือนรุ่น 2) ข้อความประเสริฐจะไม่บ่นเกี่ยวกับมันอย่างน้อยในขณะที่มันจะบ่น{"__comment": ...}ในคอนโซลเพราะมันเป็นเขตที่ไม่คาดคิด
Driftcatcher

8
และนี่อาจเป็นเหตุผลหนึ่งว่าทำไม TOML ถูกสร้างขึ้น ..
อเล็กซ์ Nolasco

10
Noobish เล็กน้อย แต่ฉันก็ลองใช้ // สำหรับความคิดเห็นใน JSON ตอนนี้ฉันรู้ว่ามันใช้สำหรับการแลกเปลี่ยน / แลกเปลี่ยนอย่างเคร่งครัด เฮ้อ! ฉันไม่สามารถแสดงความคิดเห็นใด ๆ เพิ่มเติม :(. ชีวิตจะถึงวาระ!.
Sid

12
JSON5 รองรับความคิดเห็น: stackoverflow.com/a/7901053/108238
schoetbi

คำตอบ:


5591

เลขที่

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

232
อาจจ่ายให้มีคำนำหน้าบางชนิดในความคิดเห็นจริงในกรณีที่มีฟิลด์ที่ถูกต้องชื่อ comment:"__comment":"comment text goes here...",
Rob Fonseca-Ensor

19
BTW ไลบรารี json สำหรับ Java google-gsonมีการสนับสนุนสำหรับความคิดเห็น
centic

11
จะเป็นอย่างไรถ้าฉันต้องการแสดงความคิดเห็นแยกต่างหากในAccronymและAbbrevคุณสมบัติ ฉันเคยใช้รูปแบบนี้มาก่อน แต่หยุดเพราะไม่อนุญาตให้ทำ มันเป็นแฮ็ค บางทีถ้าฉันเติมชื่อคุณสมบัติด้วย__comment__แทน นั่นคือ "__comment__Abbrev" ยังคงเป็นแฮ็ก แต่ฉันจะแสดงความคิดเห็นเกี่ยวกับคุณสมบัติทั้งหมด
Juan Mendes

41
คุณสามารถใช้ "//": นี่ดูเป็นภาษาพื้นเมืองมากกว่าและยังสามารถทำซ้ำได้ในผู้ปกครองคนเดียวกัน
smnbbrv

4
เมื่อใช้ JSON สำหรับไฟล์กำหนดค่าที่มนุษย์ตั้งใจควรมีการเพิ่มความคิดเห็นเพื่อให้มนุษย์เข้าใจได้ดี บันทึกย่อแล้วไฟล์ดังกล่าวไม่สามารถใช้ JSON ได้อีกต่อไป แต่มีวิธีแก้ไข ตัวอย่างเช่น GYP ของ Google รองรับความคิดเห็น #-style JSON.Minify จะช่วยให้คุณละทิ้งความคิดเห็นสไตล์ C / C ++ จากไฟล์อินพุตของคุณ
ПетърПетров

1841

ไม่ความคิดเห็นของฟอร์ม//…หรือ/*…*/ไม่ได้รับอนุญาตใน JSON คำตอบนี้ขึ้นอยู่กับ:

  • http://www.json.org
  • RFC 4627 : application/jsonประเภทสื่อสำหรับสัญลักษณ์วัตถุ JavaScript (JSON)
  • RFC 8259รูปแบบการแลกเปลี่ยนข้อมูลวัตถุ JavaScript (JSON) รูปแบบการแลกเปลี่ยนข้อมูล (supercedes RFCs 4627, 7158, 7159)

67
หากคุณต้องการใส่หมายเหตุประกอบ JSON ของคุณด้วยความคิดเห็น (ทำให้ JSON นั้นไม่ถูกต้อง) ให้ย่อขนาดลงก่อนที่จะแยกวิเคราะห์หรือส่ง Crockford เองก็ยอมรับสิ่งนี้ในปี 2012 ในบริบทของไฟล์กำหนดค่า
แถบเครื่องมือ

24
@alkuzad: เมื่อมันมาถึงไวยากรณ์อย่างเป็นทางการจะต้องมีอะไรบางอย่างที่กล่าวอย่างชัดเจนว่าพวกเขาจะได้รับอนุญาตไม่วิธีอื่น ๆ ตัวอย่างเช่นใช้ภาษาการเขียนโปรแกรมที่คุณเลือก: เพียงเพราะคุณสมบัติบางอย่างที่ต้องการ (แต่ขาดหายไป) ไม่ได้รับอนุญาตอย่างชัดเจนไม่ได้หมายความว่าคอมไพเลอร์ของคุณจะจดจำได้อย่างน่าอัศจรรย์
stakx - ไม่ได้มีส่วนร่วมอีก

5
ใช่. รูปแบบ JSON มีช่องว่างระหว่างองค์ประกอบจำนวนมากและไม่คำนึงถึงช่องว่างในภูมิภาคเหล่านั้นดังนั้นจึงไม่มีเหตุผลว่าทำไมคุณไม่สามารถแสดงความคิดเห็นเดียวหรือหลายบรรทัดได้ parsers และ minifiers จำนวนมากสนับสนุนความเห็นของ JSON เช่นกันดังนั้นให้แน่ใจว่า parser ของคุณรองรับพวกเขา JSON มีการใช้งานจำนวนมากสำหรับข้อมูลแอปพลิเคชันและการตั้งค่าการกำหนดค่าดังนั้นความคิดเห็นจึงเป็นสิ่งจำเป็น "ข้อมูลจำเพาะอย่างเป็นทางการ" เป็นความคิดที่ดี แต่ไม่เพียงพอและล้าสมัยเลวร้ายเกินไป ลดขนาด JSON ของคุณหากคุณกังวลเกี่ยวกับขนาดหรืออัตราการโหลด
Triynko

58
แม้ว่าคำตอบของคุณจะถูกต้องอย่างแน่นอนก็ควรจะกล่าวว่านี่คือ BS ด้วยผู้ใช้จำนวนมากที่พบความต้องการการกำหนดค่า json ดังนั้นความคิดเห็นจึงมีประโยชน์อย่างยิ่ง เพียงเพราะหมวกดีบุกฟอยล์บางชิ้นตัดสินใจว่า JSON นั้นและต้องสามารถอ่านด้วยเครื่องได้เสมอโดยไม่สนใจข้อเท็จจริงที่ว่ามนุษย์จำเป็นต้องอ่านมัน
cmroanirgo

18
@cmroanirgo: เห็นได้ชัดว่าคุณไม่ใช่คนแรกที่บ่นเกี่ยวกับข้อ จำกัด ของ JSON ... นั่นเป็นสาเหตุที่เรามีโปรแกรมแยกวิเคราะห์ที่ให้ความคิดเห็นอย่างเงียบ ๆ และรูปแบบอื่น ๆ เช่น YAML และ JSON5 อย่างไรก็ตามสิ่งนี้ไม่เปลี่ยนความจริงที่ว่า JSON คืออะไร แต่ฉันคิดว่ามันน่าสนใจที่ผู้คนเริ่มใช้ JSON เพื่อจุดประสงค์ที่ชัดเจนไม่เพียงพอในตอนแรกเนื่องจากมีข้อ จำกัด ในเรื่องดังกล่าว อย่าตำหนิรูปแบบ JSON ตำหนิตัวเองสำหรับการยืนยันในการใช้งานในที่ที่ไม่เหมาะสมโดยเฉพาะอย่างยิ่ง
stakx - ไม่สนับสนุน

802

รวมความคิดเห็นหากคุณเลือก ถอดออกด้วย minifier ก่อนที่จะแยกหรือส่ง

ฉันเพิ่งเปิดตัวJSON.minify ()ซึ่งตัดความคิดเห็นและช่องว่างออกจากบล็อกของ JSON และทำให้ JSON นั้นถูกต้องซึ่งสามารถแยกวิเคราะห์ได้ ดังนั้นคุณอาจใช้มันเช่น:

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

เมื่อผมปล่อยให้มันผมได้ฟันเฟืองใหญ่ของคนที่ไม่เห็นด้วยกับความคิดแม้กระทั่งของมันดังนั้นฉันตัดสินใจว่าฉันต้องการเขียนบล็อกโพสต์ที่ครอบคลุมเกี่ยวกับเหตุผลที่ความคิดเห็นให้ความรู้สึกใน JSON มันรวมความคิดเห็นที่น่าทึ่งนี้จากผู้สร้าง JSON:

สมมติว่าคุณกำลังใช้ JSON เพื่อเก็บไฟล์การกำหนดค่าซึ่งคุณต้องการใส่คำอธิบายประกอบ ไปข้างหน้าและใส่ความคิดเห็นทั้งหมดที่คุณชอบ จากนั้นไปป์ผ่าน JSMin ก่อนที่จะส่งไปยังตัวแยกวิเคราะห์ JSON ของคุณ - Douglas Crockford, 2012

หวังว่าจะเป็นประโยชน์กับผู้ที่ไม่เห็นด้วยกับเหตุผลที่JSON.minify ()อาจมีประโยชน์


153
ปัญหาเดียวที่ฉันมีกับ JSON.minify () คือมันช้ามากจริงๆ ดังนั้นผมจึงทำการดำเนินงานของตัวเองที่จะเป็นสิ่งเดียวกัน: gist.github.com/1170297 ในไฟล์ทดสอบขนาดใหญ่บางไฟล์การใช้งานของคุณใช้เวลา 74 วินาทีและใช้เวลา 0.06 วินาที
WizKid

56
มันจะดีถ้าคุณสามารถส่งอัลกอริธึมทางเลือกที่แนะนำไปยัง github repo สำหรับ JSON.minify () เพื่อให้สามารถส่งไปยัง langs ที่รองรับได้ทั้งหมด: github.com/getify/json.minify
Kyle Simpson

16
@MiniGod ฉันเคยได้ยินความคิดของดั๊กในหัวข้อนี้หลายครั้งแล้ว ฉันพูดถึงพวกเขามานานแล้วในโพสต์บล็อกของฉัน: blog.getify.com/json-comments
Kyle Simpson

18
@ MarnenLaibow-Koser ยังคงมีการใช้งานที่ถูกต้องสำหรับความคิดเห็นแม้สำหรับการใช้งานสตรีมข้อมูล (หรือแม้กระทั่งแพ็คเก็ต): การรวมข้อมูลเมตาวินิจฉัยเช่นการสร้างเวลาหรือแหล่งกำเนิดเป็นเรื่องธรรมดาที่ใช้กับ XML และเหมาะสมสำหรับข้อมูล JSON เช่นกัน ข้อโต้แย้งต่อความคิดเห็นนั้นตื้นและรูปแบบข้อมูลที่เป็นข้อความใด ๆ ควรอนุญาตให้แสดงความคิดเห็นโดยไม่คำนึงถึงการใช้งานโดยนัย (ไม่มีข้อกำหนดพิเศษที่แนะนำให้ใช้ JSON ไม่ได้ที่อื่น fwiw)
StaxMan

18
หาก JSON ต้องได้รับการยอมรับในระดับสากล ตัวอย่าง: JSON สามารถใช้เป็นไฟล์กำหนดค่าแอปพลิเคชัน แอปพลิเคชันนี้ต้องการความคิดเห็น
eggmatters

441

ความคิดเห็นถูกลบออกจาก JSON โดยการออกแบบ

ฉันลบความคิดเห็นจาก JSON เพราะฉันเห็นคนกำลังใช้พวกเขาเพื่อจัดระเบียบคำสั่งซึ่งเป็นวิธีที่จะทำลายการทำงานร่วมกัน ฉันรู้ว่าการขาดความคิดเห็นทำให้บางคนเศร้า แต่ก็ไม่ควร

สมมติว่าคุณกำลังใช้ JSON เพื่อเก็บไฟล์การกำหนดค่าซึ่งคุณต้องการใส่คำอธิบายประกอบ ไปข้างหน้าและใส่ความคิดเห็นทั้งหมดที่คุณชอบ จากนั้นไปป์ผ่าน JSMin ก่อนที่จะส่งไปยังตัวแยกวิเคราะห์ JSON ของคุณ

ที่มา: คำแถลงสาธารณะของ Douglas Crockford บน G +


198
ฉันคิดว่า JSON ควรจะเป็นคนอ่านได้มากกว่าพูด XML? ความคิดเห็นมีไว้เพื่อให้สามารถอ่านได้
intrepidis

25
อย่างไรก็ตามคุณอาจซุกซนและเพิ่มคำสั่งแยกวิเคราะห์ใน JSON: {"__directives": {"# n #": "DateTime.Now"}, "validdate": "# n #"} ... ดูเหมือนว่า YAML เป็นวิธีที่ไปข้างหน้าแล้ว ...
intrepidis

73
ความคิดเห็นส่วนตัว: ไม่อนุญาตให้แสดงความคิดเห็นเป็นง่อย ฉันไม่มีตัวเลือกอื่นนอกจากสร้างตัวแยกวิเคราะห์ JSON ที่ไม่ได้มาตรฐานซึ่งไม่สนใจความคิดเห็นเพื่อถอดรหัสไฟล์ปรับแต่งของฉัน
caiosm1005

17
@ArturCzajka ฉันยังคงไม่ชอบความจริงที่ JSON ไม่สนับสนุนความคิดเห็น แต่ฉันลองใช้ INI และฉันต้องยอมรับว่ามันเหมาะสมกว่าที่จะใช้พวกเขาผ่าน JSON สำหรับไฟล์ปรับแต่ง ขอบคุณสำหรับคำตอบและหวังว่าผู้คนจะเปลี่ยนใจเมื่อพวกเขาอ่านบทสนทนานี้ (การแยกวิเคราะห์เป็นการออกกำลังกายมากกว่าเดิม :)
caiosm1005

77
นั่นเหมือนกับการบังคับให้จักรยานทุกคันต้องมีล้อฝึกซ้อมเพราะบางคนไม่สามารถขี่จักรยานได้ การลบฟีเจอร์ที่สำคัญออกเนื่องจากคนโง่ที่ใช้งานในทางที่ผิดนั่นคือการออกแบบที่ไม่ดี รูปแบบข้อมูลควรจัดลำดับความสำคัญการใช้งานมากกว่าการเป็นคนงี่เง่า - พิสูจน์
Phil Goetz

205

การปฏิเสธความรับผิด: การรับประกันของคุณเป็นโมฆะ

ดังที่ได้กล่าวมาแล้วการแฮกนี้ใช้ประโยชน์จากการนำข้อมูลจำเพาะไปใช้ ตัวแยกวิเคราะห์ JSON บางส่วนเท่านั้นที่จะเข้าใจ JSON ประเภทนี้ได้ ตัวแยกวิเคราะห์สตรีมมิ่งโดยเฉพาะจะทำให้หายใจไม่ออก

มันเป็นความอยากรู้ที่น่าสนใจ แต่คุณควรมันไม่ใช้มันเพื่ออะไรเลย ด้านล่างนี้เป็นคำตอบเดิม


ฉันพบแฮ็คเล็กน้อยที่ช่วยให้คุณสามารถแสดงความคิดเห็นในไฟล์ 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]
}

ซึ่งหมายความว่าไม่มีร่องรอยของความคิดเห็นและพวกเขาจะไม่มีผลข้างเคียงที่แปลก

แฮ็คมีความสุข!


150
จากข้อกำหนด : ชื่อภายในวัตถุควรเป็นชื่อเฉพาะ
เควนติน

113
"การใช้งานทั้งหมดจัดการมันเหมือนกัน" - นั่นเป็นเรื่องยากที่จะพิสูจน์
เควนติน

91
ไม่รับประกันลำดับขององค์ประกอบใน JSON นั่นหมายความว่ารายการ "สุดท้าย" สามารถเปลี่ยนแปลงได้!
sep332

66
นี่เป็นการละเมิดข้อกำหนดอย่างชัดเจน (ดูความคิดเห็นด้านบน) อย่าทำเช่นนี้ ietf.org/rfc/rfc4627.txt?number=4627
voidlogic

333
ไม่ - จะเกิดอะไรขึ้นถ้าโปรแกรมแยกวิเคราะห์สตรีมมิ่ง? จะเกิดอะไรขึ้นถ้า parser อ่านมันเข้าไปในพจนานุกรมที่การเรียงลำดับคีย์ไม่ได้กำหนดไว้? ฆ่านี้ด้วยไฟ
deanWombourne

183

JSON ไม่สนับสนุนความคิดเห็น มันก็ไม่เคยตั้งใจที่จะใช้สำหรับไฟล์การกำหนดค่าที่ความคิดเห็นจะต้อง

Hjson เป็นรูปแบบไฟล์กำหนดค่าสำหรับมนุษย์ ไวยากรณ์ที่ผ่อนคลาย, ข้อผิดพลาดน้อยลง, ความคิดเห็นเพิ่มเติม

แนะนำ Hjson

ดูhjson.orgสำหรับ JavaScript, Java, Python, PHP, Rust, Go, Ruby และ C #


13
upvoted เห็นได้ชัดว่ามันเป็นรูปแบบที่ดีคนหัวโบราณที่ยังไม่เปิดก็แค่ชอบที่จะเกลียด ฉันหวังว่าการนำไปปฏิบัติของคุณจะเป็นที่รู้จักมากขึ้นและอาจได้รับความนิยมมากกว่าเดิม;) ฉันหวังว่าบางคนจะนำไปใช้กับทับทิมด้วยเช่นกัน @adelphus ภาษาที่ถูกกำหนดเป็นมุมมองหรือความคิดเห็นของคุณเอง การเป็น "นักพัฒนา" แบบอนุรักษ์นิยมหากคุณเป็นคนหนึ่งไม่ได้พิสูจน์ว่าคุณเก่งกว่าและคุณอาจยิ่งแย่กว่านั้นคือทำให้ตัวเองถูกขังอยู่ในพื้นที่ จำกัด อย่าไปตัดสินผู้คนว่าเป็นนักพัฒนาที่น่ากลัวอย่างง่ายดาย
konsolebox

7
ขอโทษด้วยที่ @konsolebox บางทีคุณอาจพิจารณามุมมอง "JSON ที่กำหนดไว้อย่างดีคือความเห็นของคุณ" หลังจากอ่านecma-international.org/publications/files/ECMA-ST/ECMA-404.pdfเป็นมาตรฐานที่แท้จริงและ devs ที่ใช้รุ่น "พิเศษ" ของพวกเขาเอง นำไปสู่การกระจายตัวของความสับสนและเสียเวลามาก ดูนักพัฒนาเว็บที่ยุ่งเหยิงเมื่อเขียนโค้ดเพียงเพราะแต่ละเบราว์เซอร์ใช้มาตรฐานที่แตกต่างกันเล็กน้อย ภาษา JSON อาจไม่สมบูรณ์แบบ แต่การแยกส่วนนั้นแย่กว่า และใช่นั่นเป็นเพียงความเห็นและคุณมีอิสระที่จะไม่เห็นด้วย
adelphus

22
ฉันชื่นชมสิ่งที่คุณชอบ แต่คุณกำลังคิดค้น YAML อีกครั้ง หากคุณต้องการความยืดหยุ่นและความสามารถในการอ่านของมนุษย์จำนวนมากให้ใช้ YAML (ไม่จริง: stackoverflow.com/questions/450399/… ) หรือติดกับ curmudgeony แต่ไม่ต้องสงสัย JSON
เครื่องมือ

4
ฉันพบว่ารูปแบบการกำหนดค่าที่ใช้งานง่ายที่สุดยังคงเป็น INI มันตรงไปตรงมาและไม่หนักมาก สิ่งนี้ทำให้การข่มขู่ผู้ใช้น้อยลงเพียงแค่จุ่มนิ้วเท้าลงในบ่อตั้งค่า
Matt

14
เมื่อใดก็ตามที่คุณต้องการเป็น JSON การตั้งค่า (ที่ความคิดเห็นจะจำเป็น) - ตั้งชื่อไฟล์ ".js" แทน ".json" .. js สามารถของหลักสูตรการจัดการวัตถุ JSON ถูกต้องใด ๆ และยังสามารถจัดการกับความคิดเห็น .. นั่นเป็นเหตุผลว่าทำไมมันเป็น "webpack.config.js" และไม่ใช่ "webpack.config.json" (ก็มีเหตุผลอีกมากมายเช่นกันใน webpack: P)
jebbie

122

พิจารณาใช้ YAML มันเกือบจะเป็นชุดของ JSON (เกือบทุก JSON ที่ถูกต้องคือ YAML ที่ถูกต้อง) และอนุญาตให้แสดงความคิดเห็นได้


12
@ g33kz0r ถูกต้องดังนั้นคำอธิบายของฉันเกี่ยวกับ YAML ในลักษณะใกล้เคียงกับ JSON
Marnen Laibow-Koser

12
@NateS หลายคนได้ชี้ให้เห็นแล้วว่าคำตอบคือไม่ ฉันแนะนำวิธีที่ดีกว่าเพื่อให้บรรลุเป้าหมายของ OP นั่นเป็นคำตอบ
Marnen Laibow-Koser

5
ข้อเสีย: yamlไลบรารีไม่ได้จัดส่งกับ Python
นิ้วเลือดออก

6
@ marnen-laibow-koser: มันต้องมีความสามารถในการใช้ไลบรารี YAML ที่มีอยู่สำหรับ Java และ Perl และคาดว่า YAML ที่ผลิตโดยแต่ละรายการจะถูกใช้โดยไม่มีข้อผิดพลาด การทำงานร่วมกันของ YAML นั้นเป็นปัญหา แต่การทำงานร่วมกันของ JSON ไม่ได้อธิบายโดยสิ้นเชิงจากการขาดความรู้ของฉัน
แถบเครื่องมือ

3
@ marnen-laibow-koser รูปแบบที่ทำสิ่งเดียวกันให้สำเร็จด้วยสเป็คที่เรียบง่ายจะดีกว่า รูปแบบในทางปฏิบัติที่มีการใช้งานที่สมบูรณ์แบบดีกว่ารูปแบบในอุดมคติที่มีการใช้งานที่ไม่สมบูรณ์ ไม่ใช่ความผิดทั้งหมดสำหรับ libs ที่ผิดพลาดอยู่ที่ไหล่ของผู้ดำเนินการ สเปคของ YAML นั้นยาวมีความหนาแน่นและป้าน รายการวิกิพีเดียมันอ้างถึงสองตัวอย่างของความคลุมเครือ; ถ้าเราต้องวางอีซีแอลระหว่างมนุษย์และรูปแบบเพื่อปกป้องพวกเขาจากความกำกวมรูปแบบจะสูญเสียการเรียกร้องที่เป็นมิตรของมนุษย์ JSON อ้างสิทธิ์น้อยลงและประสบความสำเร็จโดยส่วนใหญ่ซึ่ง YAML อ้างสิทธิ์มากขึ้นและสั้นลง
แถบเครื่องมือ

108

คุณทำไม่ได้ อย่างน้อยนั่นคือประสบการณ์ของผมจากอย่างรวดเร็วในjson.org

JSON มีรูปแบบการแสดงผลของมันในหน้านั้น ไม่มีหมายเหตุเกี่ยวกับความคิดเห็น


67

ความคิดเห็นไม่ใช่มาตรฐานอย่างเป็นทางการแม้ว่า parsers บางคนสนับสนุน 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ไม่ได้ตรวจสอบสิ่งนี้ ดังนั้นความคิดเห็นเป็นส่วนขยายที่แยกวิเคราะห์เฉพาะและไม่ได้มาตรฐาน

parser ก็คือJSON5

ทางเลือกในการ JSON TOML

ทางเลือกต่อไปคือjsonc


Groovy ได้บางตัวในชั้นเรียนสำหรับการจัดการ JSON JsonSlurper สามารถจัดการความคิดเห็น แน่นอนว่าไม่อนุญาตให้แสดงความคิดเห็นในข้อมูลจำเพาะอย่างเป็นทางการดังนั้นพฤติกรรมนี้ในตัวแยกวิเคราะห์ใด ๆ จึงไม่ได้มาตรฐานและไม่สามารถพกพาได้
izrik

Newtonsoft Json.NET ยังสนับสนุนการแสดงความคิดเห็นแบบ C โดยไม่มีปัญหา
Max

66

คุณควรเขียนJSON schemaแทน JSON schema ปัจจุบันเป็นข้อกำหนดทางอินเทอร์เน็ตฉบับร่าง นอกจากเอกสารแล้วสกีมายังสามารถใช้สำหรับตรวจสอบข้อมูล JSON ของคุณ

ตัวอย่าง:

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

คุณสามารถให้เอกสารโดยใช้แอตทริบิวต์description schema


5
JSON schema ยังมีชีวิตอยู่หรือไม่? มันมีอยู่ แต่มันสนับสนุนไลบรารีที่รู้จักใด ๆ หรือไม่
Munhitsu

1
ใช่กลุ่ม Google json-schemaนั้นค่อนข้างแอคทีฟและฉันอยากจะแนะนำJSVสำหรับการติดตั้ง JavaScript ตัวตรวจสอบ JSON Schema
raffel

5
สิ่งนี้จะช่วยได้เฉพาะเอกสารที่มีโครงสร้างไม่ใช่เอกสารแบบเฉพาะกิจ
Juan Mendes

หากคุณใช้ clojure (และฉันแน่ใจว่าคุณไม่ได้) มีตัวแยกวิเคราะห์ JSON schema แบบโอเพนซอร์สที่โดดเด่นในราคาสมเหตุสมผล: github.com/bigmlcom/closchema
charleslparker

@Munhitsu Manatee.Json (.Net) สนับสนุน JSON schema อย่างกว้างขวาง
gregsdennis

64

หากคุณใช้แจ็คสันเป็นเครื่องมือแยกวิเคราะห์ JSON ของคุณนี่คือวิธีที่คุณเปิดใช้งานเพื่อให้ความคิดเห็น:

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

จากนั้นคุณสามารถมีความคิดเห็นเช่นนี้:

{
  key: "value" // Comment
}

และคุณยังสามารถมีความคิดเห็นที่เริ่มต้นด้วย#การตั้งค่า:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

แต่โดยทั่วไป (ตามคำตอบก่อนหน้านี้) สเปคไม่อนุญาตให้แสดงความคิดเห็น


50

นี่คือสิ่งที่ฉันพบในเอกสาร 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"
}

FYI, Firebase Realtime Database ไม่อนุญาตให้ใช้ '/' ในคีย์ ดังนั้นนี่อาจเป็นการประชุมที่ดีสำหรับการใช้งานของคุณเอง แต่คุณไม่สามารถทำได้ใน Firebase
gutte

5
วิธีนี้แบ่งบางไลบรารีซึ่งต้องการให้คีย์ต้องไม่ซ้ำกัน ฉันกำลังแก้ไขปัญหานั้นโดยลำดับความคิดเห็น
MovGP0

ความคิดเห็นที่ดีฉันพบคำถามนี้ดังนั้น ... ส่วนนี้ดูเหมือนจะไม่ครอบคลุมโดยข้อมูลจำเพาะstackoverflow.com/questions/21832701/…
มานะ

4
ฉันมักจะใช้มันเช่นนี้ในปัจจุบัน: {"// foo": "foo comment", "foo": "foo value", "// bar": "bar comment", "bar bar": "bar value"} คุณสามารถใช้อาร์เรย์สำหรับความคิดเห็นหลายรายการ: {"// foo": ["foo comment 1", "foo comment 2"], "foo": '' ค่า foo "}
MovGP0

47

NO JSON ใช้เพื่อสนับสนุนความคิดเห็น แต่ถูกใช้ในทางที่ผิดและลบออกจากมาตรฐาน

จากผู้สร้าง JSON:

ฉันลบความคิดเห็นจาก JSON เพราะฉันเห็นคนกำลังใช้พวกเขาเพื่อจัดระเบียบคำสั่งซึ่งเป็นวิธีที่จะทำลายการทำงานร่วมกัน ฉันรู้ว่าการขาดความคิดเห็นทำให้บางคนเศร้า แต่ก็ไม่ควร - Douglas Crockford, 2012

เว็บไซต์อย่างเป็นทางการ JSON ที่JSON.org JSON ถูกกำหนดให้เป็นมาตรฐานโดย ECMA International มีกระบวนการยื่นคำร้องเพื่อให้มีการแก้ไขมาตรฐานอยู่เสมอ ไม่น่าเป็นไปได้ที่จะมีการเพิ่มคำอธิบายประกอบในมาตรฐาน JSON ด้วยเหตุผลหลายประการ

JSON โดยการออกแบบเป็นทางเลือกที่ย้อนกลับวิศวกรรม (มนุษย์แยกวิเคราะห์) ได้อย่างง่ายดายเพื่อ XML มันง่ายแม้กระทั่งในจุดที่ว่าคำอธิบายประกอบนั้นไม่จำเป็น มันไม่ได้เป็นภาษามาร์กอัป เป้าหมายคือความมั่นคงและทำงานร่วมกัน

ทุกคนที่เข้าใจความสัมพันธ์ "มี - a" ของการวางแนววัตถุสามารถเข้าใจโครงสร้าง JSON ใด ๆ - นั่นคือทั้งหมด มันเป็นเพียงกราฟกำกับ (DAG) ที่มีแท็กโหนด (คู่คีย์ / ค่า) ซึ่งเป็นโครงสร้างข้อมูลสากลที่อยู่ใกล้

หมายเหตุประกอบที่จำเป็นเท่านั้นนี้อาจเป็น "// นี่คือแท็ก DAG" ชื่อคีย์สามารถเป็นข้อมูลได้ตามต้องการอนุญาตให้ใช้ arity semantic โดยพลการ

แพลตฟอร์มใด ๆ สามารถแยก JSON ด้วยโค้ดเพียงไม่กี่บรรทัด XML ต้องการไลบรารี OO ที่ซับซ้อนซึ่งไม่สามารถใช้งานได้ในหลายแพลตฟอร์ม

คำอธิบายประกอบจะทำให้ JSON ทำงานร่วมกันได้น้อยลง ไม่มีอะไรเพิ่มอีกนอกจากสิ่งที่คุณต้องการจริงๆคือภาษามาร์กอัป (XML) และไม่สนใจว่าข้อมูลที่เก็บไว้ของคุณจะถูกแยกวิเคราะห์อย่างง่ายดาย

แต่ในฐานะผู้สร้าง JSON ก็สังเกตเห็นว่ามีการสนับสนุนไปป์ไลน์ JS สำหรับความคิดเห็น:

ไปข้างหน้าและใส่ความคิดเห็นทั้งหมดที่คุณชอบ จากนั้นไปป์ผ่าน JSMin ก่อนที่จะส่งไปยังตัวแยกวิเคราะห์ JSON ของคุณ - Douglas Crockford, 2012


37

หากไฟล์ข้อความของคุณซึ่งเป็นสตริง JSON กำลังถูกอ่านโดยโปรแกรมบางโปรแกรมมันจะยากเพียงใดในการแยกความคิดเห็นสไตล์ C หรือ C ++ ก่อนที่จะใช้

คำตอบ:มันจะเป็นหนึ่งซับ หากคุณทำเช่นนั้นไฟล์ JSON สามารถใช้เป็นไฟล์กำหนดค่าได้


1
อาจเป็นคำแนะนำที่ดีที่สุดจนถึงแม้ว่าจะยังคงมีปัญหาในการเก็บไฟล์เป็นรูปแบบการแลกเปลี่ยนเนื่องจากพวกเขาต้องการการประมวลผลล่วงหน้าก่อนการใช้งาน
Orbling

ฉันเห็นด้วยและเขียน JSON parser ใน Java ซึ่งมีอยู่ที่ www.SoftwareMonkey.org
Lawrence Dol

2
แม้ว่าฉันจะคิดว่ามันไม่ใช่ความคิดที่ดีที่จะขยาย JSON (โดยไม่ต้องเรียกมันว่าเป็นรูปแบบการแลกเปลี่ยนที่แตกต่างกัน): อย่าลืม "ความคิดเห็น" ภายในสตริง {"foo": "/ * นี่ไม่ใช่ความคิดเห็น * /"}
stofl

27
"... จะเป็นหนึ่งในสายการบิน" อืมมไม่จริง JSON ไม่ใช่ไวยากรณ์ปกติที่นิพจน์ปกติสามารถหาคู่ที่ตรงกันของ / * ได้ คุณต้องแยกวิเคราะห์ไฟล์เพื่อดูว่ามี / * ปรากฏอยู่ในสตริง (และไม่สนใจ) หรือถ้ามันถูกหลบหนี (และไม่สนใจ) ฯลฯ นอกจากนี้คำตอบของคุณไม่ช่วยเหลือเพราะคุณคาดเดา (ไม่ถูกต้อง) แทนที่จะให้ ทางออกใด ๆ
Kyle Simpson

1
สิ่งที่ @ kyle-simpson พูด นอกจากนี้เขายังถ่อมตัวเกินไปที่จะบอกผู้อ่านถึงคำตอบของเขาเกี่ยวกับการใช้ JSON.minify แทน ad hoc regexps ทำอย่างนั้นไม่ได้
เครื่องมือ

36

หากคุณใช้ไลบรารี Newtonsoft.Json กับ ASP.NET เพื่ออ่าน / deserialize คุณสามารถใช้ข้อคิดเห็นในเนื้อหา JSON:

// "ชื่อ": "สตริง"

// "id": int

หรือ

/* มันคือ

ตัวอย่างความคิดเห็น * /

PS:ความคิดเห็นบรรทัดเดียวได้รับการสนับสนุนเฉพาะกับ Newtonsoft Json รุ่น 6+

หมายเหตุเพิ่มเติมสำหรับผู้ที่ไม่สามารถคิดนอกกรอบ:ฉันใช้รูปแบบ JSON สำหรับการตั้งค่าพื้นฐานในแอปพลิเคชันเว็บ ASP.NET ที่ฉันทำ ฉันอ่านไฟล์แปลงเป็นวัตถุการตั้งค่าด้วยไลบรารี Newtonsoft และใช้เมื่อจำเป็น

ฉันชอบเขียนความคิดเห็นเกี่ยวกับการตั้งค่าส่วนบุคคลในไฟล์ JSON และฉันไม่สนใจเกี่ยวกับความสมบูรณ์ของรูปแบบ JSON ตราบใดที่ไลบรารีที่ฉันใช้นั้นใช้ได้ด้วย

ฉันคิดว่านี่เป็นวิธี 'ใช้งาน / เข้าใจง่ายกว่า' สร้างไฟล์ 'settings.README' แยกต่างหากและอธิบายการตั้งค่าในนั้น

หากคุณมีปัญหากับการใช้งานประเภทนี้ ขออภัยมารนั้นไม่อยู่ในไฟ ผู้คนจะพบกับประเพณีอื่น ๆ สำหรับรูปแบบ JSON และไม่มีอะไรที่คุณสามารถทำได้


เป็นการยากที่จะเข้าใจว่าทำไมบางคนจะมีปัญหากับการระบุข้อเท็จจริง
dvdmn

ฉันจะถือว่ามีคนยกเว้นเพราะข้างต้นไม่ได้เป็น JSON หรือเป็น JSON ที่ไม่ถูกต้อง บางทีการเพิ่มข้อจำกัดความรับผิดชอบสั้น ๆ จะเอาใจ
เครื่องมือ

5
ฉันเห็นด้วยกับคุณอย่างสมบูรณ์และยังมีผู้โหวตมากถึง 883 คนสำหรับคำตอบที่ไม่ชัดเจน ความบริสุทธิ์ทางอุดมการณ์ซึ่งมีคุณค่าเหนือข้อมูลที่เป็นประโยชน์นั่นเป็นสิ่งที่ดีสำหรับคุณ
จอห์น

จุดคือไฟล์ที่มีความคิดเห็นไม่ใช่ JSON และจะไม่สามารถแยกวิเคราะห์โดยไลบรารี JSON จำนวนมาก รู้สึกอิสระที่จะทำสิ่งที่คุณต้องการในโปรแกรมของคุณเอง แต่ไฟล์ที่มีความคิดเห็นไม่ใช่ JSON ถ้าคุณอ้างว่าเป็นคนก็จะพยายามแยกมันด้วยภาษา / ห้องสมุดที่พวกเขาเลือกและมันจะล้มเหลว มันเหมือนถามว่าคุณสามารถใช้วงเล็บเหลี่ยมแทนวงเล็บมุมใน XML คุณสามารถทำสิ่งที่คุณต้องการ แต่มันจะไม่เป็น XML อีกต่อไป
gman

32

แนวคิดเบื้องหลัง JSON คือการให้การแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันอย่างง่าย โดยทั่วไปจะใช้เว็บและภาษาคือ JavaScript

ไม่อนุญาตให้มีการแสดงความคิดเห็นเช่นนี้อย่างไรก็ตามการส่งความคิดเห็นเป็นหนึ่งในคู่ชื่อ / ค่าในข้อมูลจะทำงานได้อย่างแน่นอนแม้ว่าข้อมูลนั้นจะต้องถูกละเว้นหรือจัดการโดยรหัสการแยกวิเคราะห์

ทั้งหมดที่กล่าวมานั้นไม่ใช่ความตั้งใจที่ไฟล์ JSON ควรมีความคิดเห็นตามความหมายดั้งเดิม มันควรเป็นข้อมูล

ดูรายละเอียดเพิ่มเติมที่เว็บไซต์ JSON


17
เป็นจริงว่ารูปแบบ JSON ไม่มีความคิดเห็น โดยส่วนตัวแล้วฉันคิดว่านั่นเป็นข้อผิดพลาดที่สำคัญ - ความสามารถในการแสดงความคิดเห็นในฐานะข้อมูลเมตา (ไม่ใช่ข้อมูล) เป็นสิ่งที่มีประโยชน์มากเมื่อใช้ xml เวอร์ชันก่อนหน้าของข้อมูลจำเพาะ JSON ไม่ได้รวมความคิดเห็น แต่ด้วยเหตุผลบางอย่างที่ส่งไป : - /
StaxMan

4
@StaxMan พวกเขาลดลงอย่างแน่นอนเพราะผู้คนเริ่มใช้พวกเขาเป็นเมตาดาต้า Crockford กล่าวว่ามันทำลายความเข้ากันได้ของรูปแบบที่ออกแบบมาและฉันยอมรับว่า: หากคุณต้องการข้อมูลเมตาทำไมไม่รวมเป็นข้อมูลจริง ง่ายยิ่งขึ้นในการแยกวิเคราะห์ด้วยวิธีนี้
Camilo Martin

6
ข้อมูลเมตาอยู่ในโครงสร้างข้อมูลเมตา (เช่นแท็ก HTML <meta>) ไม่ใช่ความคิดเห็น การแสดงความคิดเห็นที่ไม่เหมาะสมสำหรับข้อมูลเมตาเป็นเพียงแฮ็คที่ใช้ซึ่งไม่มีการสร้างข้อมูลเมตาที่แท้จริง
Marnen Laibow-Koser

นั่นเป็นเหตุผลว่าทำไมมันถึงถูกทิ้ง: ความคิดเห็นที่ใช้เป็นข้อมูลเมตาจะทำลายการทำงานร่วมกัน คุณควรเก็บเมตาดาต้าของคุณเป็น JSON ด้วย
gaborous

1
คำตอบนี้ซ้ำซ้อนกับการเขียนที่ดีกว่าคำตอบ upvoted ที่สูงขึ้นซึ่งบอกเป็นหลักในสิ่งเดียวกันแม้ว่าอาจจะเขียนไว้ก่อนหน้านี้ Cest la vie
แถบเครื่องมือ

29

ฉันเพิ่งพบกับไฟล์กำหนดค่า ฉันไม่ต้องการใช้ XML (verbose, กราฟิก, น่าเกลียด, ยากที่จะอ่าน) หรือรูปแบบ "ini" (ไม่มีลำดับชั้น, ไม่มีมาตรฐานจริง ฯลฯ ) หรือรูปแบบ "คุณสมบัติ" ของ Java (เช่น. ini)

JSON สามารถทำทุกอย่างที่ทำได้ แต่เป็นวิธีที่ละเอียดน้อยกว่าและอ่านได้ง่ายกว่ามนุษย์ - และ parsers นั้นง่ายและแพร่หลายในหลายภาษา มันเป็นต้นไม้ของข้อมูล แต่ความคิดเห็นที่ไม่อยู่ในแบนด์เป็นสิ่งจำเป็นบ่อยครั้งที่จะบันทึกการกำหนดค่า "เริ่มต้น" และสิ่งที่คล้ายกัน การกำหนดค่าต้องไม่เป็น "เอกสารเต็มรูปแบบ" แต่โครงสร้างของข้อมูลที่บันทึกไว้ซึ่งสามารถอ่านได้เมื่อจำเป็น

ฉันเดาว่าหนึ่งสามารถใช้"#": "comment"สำหรับ JSON ที่ "ถูกต้อง"


4
สำหรับไฟล์ปรับแต่งฉันขอแนะนำ YAML ไม่ใช่ JSON มันเกือบจะเป็นซุปเปอร์เซ็ตของ JSON ที่มีประสิทธิภาพมากกว่า แต่ก็รองรับโครงสร้างที่อ่านได้มากขึ้นเช่นกันรวมถึงความคิดเห็น
Marnen Laibow-Koser

1
คุณคิดว่ามีกี่ภาษาที่สนับสนุน YAML นอกกรอบเทียบกับ json
mmm

@Hamidam กว่าหนึ่งโหลภาษารองรับ yaml: yaml.org - แต่คุณถูกต้องที่จะถามว่ามีการสนับสนุนในตัวกี่คนโดยไม่จำเป็นต้องพึ่งพาห้องสมุดบุคคลที่สาม ดูเหมือนว่า Ruby 1.9.2 จะเป็นเช่นไร ใครรู้จักผู้อื่นบ้าง และภาษาใดที่สนับสนุน json โดยค่าเริ่มต้น
nealmcb

5
YAML การทำงานร่วมกันเป็นเรื่องโกหก: stackoverflow.com/questions/450399/... หากสัญชาตญาณของคุณคือการใช้ JSON สำหรับไฟล์การกำหนดค่าให้ปฏิบัติตาม
แถบเครื่องมือ

นี่เก่า แต่ฉันเชื่อว่าการใช้ # ไม่ใช่ความคิดที่ดี Json อยู่ใกล้กับไวยากรณ์ของ Javascript litteral Javascript สนับสนุนความคิดเห็น 2 ประเภท: // และ / * ... * / หากฉันเป็นคุณฉันจะยึดติดกับความคิดเห็นเหล่านี้อย่างใดอย่างหนึ่งหรือทั้งสองอย่าง
Pascal Ganaye

28

JSON ไม่สนับสนุนความคิดเห็นโดยกำเนิด แต่คุณสามารถสร้างตัวถอดรหัสของคุณเองหรืออย่างน้อยผู้ประมวลผลก่อนที่จะดึงความคิดเห็นออกมาได้อย่างสมบูรณ์แบบ (ตราบใดที่คุณไม่สนใจความคิดเห็นและไม่ใช้ความคิดเห็นเหล่านั้นเพื่อเป็นแนวทาง )

JSON ไม่มีความคิดเห็น ตัวเข้ารหัส JSON ต้องไม่แสดงความคิดเห็น ตัวถอดรหัส JSON อาจยอมรับและไม่แสดงความคิดเห็น

ความคิดเห็นไม่ควรนำมาใช้เพื่อส่งสิ่งที่มีความหมาย นั่นคือสิ่งที่ JSON มีไว้สำหรับ

Cf: ดักลาส Crockford เขียน JSON ข้อมูลจำเพาะ


4
Crockford เขียนต่อไปว่า: "สมมติว่าคุณกำลังใช้ JSON เพื่อเก็บไฟล์การกำหนดค่าซึ่งคุณต้องการใส่คำอธิบายประกอบไปข้างหน้าและใส่ความคิดเห็นทั้งหมดที่คุณต้องการจากนั้นไปป์ผ่าน JSMin ก่อนส่งมอบให้กับตัวแยกวิเคราะห์ JSON ของคุณ" ดูคำตอบของ @ kyle-simpson เกี่ยวกับ JSON.minify สำหรับข้อมูลเพิ่มเติม
แถบเครื่องมือ

28

ขึ้นอยู่กับไลบรารี JSON ของคุณ Json.NETรองรับความคิดเห็นสไตล์ JavaScript/* commment */สไตล์

ดูคำถาม Stack Overflowอื่น


และฉันเชื่อว่านั่นเป็นเหตุผลที่ฉันเห็นความคิดเห็นในภาพหน้าจอในหน้าตัวอย่าง ASP.NET vNext นี้ (ใต้ package.json): blogs.msdn.com/b/webdev/archive/2014/06/03/ …ถึงแม้ว่าฉันจะยัง ยังไม่พบข้อมูลใด ๆ ในข้อมูลจำเพาะ
webXL

27

JSON เหมาะสมกับไฟล์ปรับแต่งและการใช้งานอื่น ๆ ในท้องถิ่นเพราะมันแพร่หลายและเพราะมันง่ายกว่า XML มาก

หากผู้คนมีเหตุผลที่ชัดเจนในการแสดงความคิดเห็นใน JSON เมื่อทำการสื่อสารข้อมูล (ไม่ว่าจะถูกต้องหรือไม่ก็ตาม) อาจเป็นไปได้ว่า JSON อาจถูกแบ่งออกเป็นสองส่วน:

  • JSON-COM: JSON บน wire หรือกฎที่ใช้เมื่อสื่อสารข้อมูล JSON
  • JSON-DOC: เอกสาร JSON หรือ JSON ในไฟล์หรือในเครื่อง กฎที่กำหนดเอกสาร JSON ที่ถูกต้อง

JSON-DOC จะช่วยให้ความคิดเห็นและความแตกต่างเล็กน้อยอื่น ๆ อาจมีอยู่เช่นการจัดการช่องว่าง Parsers สามารถแปลงจากสเป็คหนึ่งไปเป็นสเปคอื่น

เกี่ยวกับคำกล่าวของดักลาสคร็อคฟอร์ดในประเด็นนี้ (อ้างอิงโดย @Artur Czajka)

สมมติว่าคุณกำลังใช้ JSON เพื่อเก็บไฟล์การกำหนดค่าซึ่งคุณต้องการใส่คำอธิบายประกอบ ไปข้างหน้าและใส่ความคิดเห็นทั้งหมดที่คุณชอบ จากนั้นไปป์ผ่าน JSMin ก่อนที่จะส่งไปยังตัวแยกวิเคราะห์ JSON ของคุณ

เรากำลังพูดถึงปัญหาไฟล์กำหนดค่าทั่วไป (ข้ามภาษา / แพลตฟอร์ม) และเขากำลังตอบกลับด้วยโปรแกรมอรรถประโยชน์ JS เฉพาะ

ตรวจสอบว่า minify เฉพาะของ JSON สามารถใช้งานได้ในทุกภาษา แต่สร้างมาตรฐานนี้เพื่อให้แพร่หลายใน parsers ในทุกภาษาและทุกแพลตฟอร์มเพื่อให้ผู้คนหยุดเสียเวลาโดยขาดคุณสมบัติเนื่องจากมีประโยชน์ในการใช้งานเป็นอย่างดี ฟอรัมออนไลน์และการให้ผู้คนบอกพวกเขาว่าเป็นความคิดที่ไม่ดีหรือแนะนำให้นำความคิดเห็นที่ลอกออกมาจากไฟล์ข้อความมาใช้ง่าย

ปัญหาอื่น ๆ คือการทำงานร่วมกัน สมมติว่าคุณมีไลบรารีหรือ API หรือระบบย่อยใด ๆ ที่มีไฟล์กำหนดค่าหรือไฟล์ข้อมูลบางอย่างที่เกี่ยวข้อง และระบบย่อยนี้จะสามารถเข้าถึงได้จากภาษาที่แตกต่างกัน ถ้าอย่างนั้นคุณจะบอกคนอื่น: อย่าลืมลบความคิดเห็นจากไฟล์ JSON ก่อนส่งต่อให้โปรแกรมแยกวิเคราะห์!


ไม่จำเป็นต้องแยกส่วน JSON JSON ที่มีความคิดเห็นไม่ใช่ JSON อีกต่อไป แต่เป็นที่ยอมรับได้อย่างสมบูรณ์ที่จะใส่คำอธิบายประกอบ JSON ของคุณด้วยความคิดเห็นตราบใดที่คุณแน่ใจว่าจะลบพวกเขาออกก่อนที่จะแยกหรือส่ง มันไม่ควรเป็นความรับผิดชอบของผู้รับที่จะทำเช่นนี้
แถบเครื่องมือ

json5.orgเป็นวิธีแก้ปัญหาสำหรับ json-doc
Michael Freidgeim

24

หากคุณใช้JSON5คุณสามารถรวมความคิดเห็นได้


JSON5 เป็นส่วนขยายที่เสนอให้กับ JSONซึ่งมีจุดมุ่งหมายเพื่อให้มนุษย์เขียนและดูแลรักษาได้ง่ายขึ้น ทำได้โดยการเพิ่มฟีเจอร์ไวยากรณ์ขั้นต่ำบางส่วนจาก ECMAScript 5 โดยตรง


5
คุณช่วยเพิ่มตัวอย่างได้ไหม จากนั้นคุณอาจต้องใช้อักขระพิเศษเหล่านั้น
dgilperez

6
เป็นไปตามข้อกำหนดของ SO เพื่อให้คำตอบจริง ไม่ต้องการคำตอบสำหรับลิงค์เท่านั้น คุณสามารถตรวจสอบหลักเกณฑ์stackoverflow.com/help/how-to-answer
dgilperez

2
ดังนั้นจะถูกตรวจสอบโดยผู้ใช้ นั่นหมายความว่าฉันสามารถให้คำตอบถ้าฉันมีมันแบบเดียวกับที่ฉันสามารถแสดงความคิดเห็นของคุณถ้ามันไม่ปฏิบัติตามแนวทาง นั่นเป็นวิธีที่ SO จะกลายเป็นทรัพยากรที่ยอดเยี่ยม
dgilperez

22

ชุดเครื่องมือ JavaScript ของ Dojo Toolkit (อย่างน้อยเป็นรุ่น 1.4) อนุญาตให้คุณใส่ความคิดเห็นใน JSON ของคุณ ความคิดเห็นสามารถเป็น/* */รูปแบบ Dojo Toolkit ใช้ JSON ผ่านการdojo.xhrGet()โทร

ชุดเครื่องมือ JavaScript อื่น ๆ อาจทำงานในทำนองเดียวกัน

สิ่งนี้มีประโยชน์เมื่อทำการทดลองกับโครงสร้างข้อมูลทางเลือก (หรือแม้แต่รายการข้อมูล) ก่อนที่จะเลือกตัวเลือกสุดท้าย


4
ไม่ใช่นี่ไม่ใช่ JSON ไม่มีความคิดเห็น หากคุณเลือกที่จะใส่คำอธิบายประกอบ JSON ของคุณด้วยความคิดเห็นให้ย่อมันก่อนที่จะแยกวิเคราะห์หรือส่ง นี่ไม่ควรเป็นความรับผิดชอบของผู้รับ
เครื่องมือ

2
ฉันไม่ได้บอกว่า JSON มีความคิดเห็น ฉันไม่ได้หมายความว่าควรรวมไว้ใน JSON ของคุณโดยเฉพาะในระบบการผลิต ฉันบอกว่าชุดเครื่องมือ Dojoอนุญาตให้คุณเพิ่มพวกเขาซึ่งเป็นความจริง (หรืออย่างน้อยก็) จริง มีประโยชน์อย่างมากสำหรับการทำเช่นนั้นในขั้นตอนการทดสอบของคุณ
เดวิด

1
มันไม่ดีในการแสดงความคิดเห็นและทำให้ JSON ไม่ถูกต้องซึ่งdojo.xhrGet()เป็นการสนับสนุนโดยปริยายโดยการยอมรับ
แถบเครื่องมือ

ฉันยังคงโหวตให้อัปเกรดข้อมูลจำเพาะ JSON เพื่อให้ความคิดเห็นได้ ฉันทั้งหมดสำหรับการลดขนาดและคัดลอกความคิดเห็นก่อนที่จะส่ง JSON แต่ไม่มีความสามารถในการคอมเมนต์ JSON ของคุณด้วยวิธีมาตรฐานโดยไม่ต้องผ่านมันผ่านยูทิลิตี้แยกต่างหากก่อนที่จะแยกวิเคราะห์ดูเหมือนว่าโง่ ฉันยังทำให้เป็นไปไม่ได้ที่จะใช้โปรแกรมแก้ไข JSON ในไฟล์กำหนดค่า JSON ของคุณเพราะไฟล์ของคุณไม่ถูกต้อง JSON
Craig

20

JSON ไม่ได้เป็นโปรโตคอลกรอบ มันเป็นรูปแบบภาษาฟรี ดังนั้นรูปแบบของความคิดเห็นจึงไม่ได้ถูกกำหนดไว้สำหรับ JSON

ตามที่หลายคนแนะนำไว้มีเคล็ดลับบางอย่างเช่นคีย์ซ้ำหรือคีย์เฉพาะ_commentที่คุณสามารถใช้ได้ มันขึ้นอยู่กับคุณ.


18

คุณสามารถมีความคิดเห็นในJSONPแต่ไม่ใช่ใน JSON บริสุทธิ์ ฉันเพิ่งใช้เวลาหนึ่งชั่วโมงเพื่อให้โปรแกรมทำงานกับตัวอย่างนี้จาก Highcharts: http://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 ส่งกลับ JavaScript บริสุทธิ์ ในกรณีนี้ความคิดเห็นที่ได้รับอนุญาต แต่แอปพลิเคชันของฉันคืนประเภทเนื้อหาapplication/jsonดังนั้นฉันจึงต้องลบความคิดเห็น


17

นี่เป็นคำถาม"คุณสามารถ" และนี่คือ"ใช่"คำตอบ

ไม่คุณไม่ควรใช้สมาชิกวัตถุซ้ำซ้อนเพื่อคัดลอกข้อมูลช่องสัญญาณด้านข้างในการเข้ารหัส JSON (ดูที่ "ชื่อภายในวัตถุควรไม่ซ้ำกัน" ใน RFC )

และใช่คุณสามารถแทรกความคิดเห็นรอบ ๆ JSONซึ่งคุณสามารถแยกวิเคราะห์ได้

แต่ถ้าคุณต้องการวิธีการแทรกและแยกข้อมูลช่องสัญญาณด้านข้างไปยัง JSON ที่ถูกต้องนี่คือคำตอบ เราใช้ประโยชน์จากการแสดงข้อมูลที่ไม่ซ้ำกันในการเข้ารหัส JSON สิ่งนี้ได้รับอนุญาต*ในส่วนที่สองของ RFC ภายใต้ "ช่องว่างอนุญาตก่อนหรือหลังอักขระโครงสร้างหกตัวใดก็ได้"

* RFC ระบุเฉพาะ "ช่องว่างอนุญาตก่อนหรือหลังอักขระโครงสร้างหกตัวใด ๆ " โดยไม่กล่าวถึงสตริงตัวเลข "เท็จ", "จริง" และ "null" อย่างชัดเจน การละเว้นนี้ถูกละเว้นในการนำไปใช้ทั้งหมด


ก่อนอื่นให้ตั้งค่า JSON ของคุณโดยการย่อขนาด:

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

จากนั้นเข้ารหัสความคิดเห็นของคุณในรูปแบบไบนารี่:

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

จากนั้น steg ไบนารีของคุณ:

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

นี่คือผลลัพธ์ของคุณ:

$jsonWithComment = $steg . $jsonMin;

1
RFC ระบุเฉพาะ "ช่องว่างที่ได้รับอนุญาตก่อนหรือหลังอักขระโครงสร้างหกตัวใด ๆ " ไม่พูดถึงสตริง, ตัวเลข, "เท็จ", "จริง", "null" อย่างชัดเจน การละเว้นนี้ถูกละเว้นในการนำไปใช้ทั้งหมด
William Entriken

1
สำหรับความหนาแน่นของความคิดเห็นที่มากขึ้นคุณไม่สามารถเข้ารหัสความคิดเห็นของคุณในแบบไตรภาคและใช้พื้นที่แท็บและการขึ้นบรรทัดใหม่เพื่อเริ่มต้นมันได้หรือไม่
Claire Nielsen

ไม่ควรจะต้อง ดู RFC 2119 ที่รวมไว้อย่างชัดเจน: ต้อง: คำนี้หรือคำว่า "จำเป็น" หรือ "SHALL" หมายความว่าคำจำกัดความเป็นข้อกำหนดที่แน่นอนของข้อกำหนด ... ควร: คำนี้หรือคำคุณศัพท์ "แนะนำ" หมายความว่าอาจมีเหตุผลที่ถูกต้องในบางสถานการณ์ที่จะไม่สนใจรายการใดรายการหนึ่ง แต่จะต้องเข้าใจอย่างถ่องแท้และคำนึงถึงผลกระทบก่อนที่จะเลือกหลักสูตรอื่น
Jeff K

อ้างอิงที่ดี เหตุผลที่ดีกว่าในการใช้คีย์ที่ซ้ำกันคือเครื่องหมายคำพูดของมาตรฐาน "เมื่อชื่อภายในวัตถุไม่ซ้ำกันพฤติกรรมของซอฟต์แวร์ที่ได้รับวัตถุนั้นจะไม่สามารถคาดเดาได้" ตอนนี้ฉันเข้าใจแล้วว่าทำไมมาตรฐานไม่ได้ "ต้องไม่ซ้ำกัน" ทำให้ตัวตรวจสอบง่ายขึ้นเท่านั้นต้องติดตาม [และ {ไม่จำเป็นต้องรู้ว่ามีการใช้คีย์ใดแล้ว
วิลเลียม Entriken

16

การปฏิเสธความรับผิด: นี่คือ SILLY

จริงๆแล้วมีวิธีในการเพิ่มความคิดเห็นและอยู่ในข้อมูลจำเพาะ (ไม่จำเป็นต้องใช้โปรแกรมแยกวิเคราะห์เพิ่มเติม) มันจะไม่ส่งผลให้เกิดความคิดเห็นที่มนุษย์อ่านได้หากไม่มีการแยกวิเคราะห์ใด ๆ

คุณสามารถละเมิดต่อไปนี้:

ช่องว่างที่ไม่มีนัยสำคัญได้รับอนุญาตก่อนหรือหลังโทเค็นใด ๆ ช่องว่างคือลำดับใด ๆ ของจุดรหัสต่อไปนี้อย่างใดอย่างหนึ่ง: การจัดตารางอักขระ (U + 0009), ตัวดึงบรรทัด (U + 000A), การคืนรถ (U + 000D) และช่องว่าง (U + 0020)

ในทางที่ผิดกฎหมายคุณสามารถใช้วิธีนี้เพื่อเพิ่มความคิดเห็น ตัวอย่างเช่น: เริ่มต้นและสิ้นสุดความคิดเห็นของคุณด้วยแท็บ เข้ารหัสความคิดเห็นใน base3 และใช้อักขระช่องว่างอื่นเพื่อแทนค่า ตัวอย่างเช่น

010212 010202 011000 011000 011010 001012 010122 010121 011021 010202 001012 011022 010212 011020 010202 010202

( hello base threeใน ASCII) แต่แทนที่จะเป็น 0 ใช้พื้นที่สำหรับ 1 ใช้ line feed และ 2 ใช้ carriage return

สิ่งนี้จะทำให้คุณมีช่องว่างที่ไม่สามารถอ่านได้มาก (เว้นแต่คุณจะสร้างปลั๊กอิน IDE เพื่อเข้ารหัส / ถอดรหัสทันที)

ฉันไม่เคยลองสิ่งนี้ด้วยเหตุผลที่ชัดเจนและไม่ควรทำเช่นนั้น


12

เราใช้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ไม่ใช่ JSON ที่ถูกต้องอีกต่อไปเมื่อรวมความคิดเห็นที่เหมาะสมเหล่านี้
Roy Prins

12

ในกรณีของฉันฉันจำเป็นต้องใช้ความคิดเห็นเพื่อวัตถุประสงค์ในการแก้ปัญหาก่อนที่จะส่งออกของโครงสร้าง JSON ดังนั้นฉันตัดสินใจที่จะใช้ข้อมูลการดีบักในส่วนหัว HTTP เพื่อหลีกเลี่ยงการทำลายลูกค้า:

header("My-Json-Comment: Yes, I know it's a workaround ;-) ");

ป้อนคำอธิบายภาพที่นี่


12

JSON ไม่อนุญาตให้แสดงความคิดเห็น เหตุผลก็คือโง่อย่างเต็มที่เพราะคุณสามารถใช้ JSON ตัวเองเพื่อสร้างความคิดเห็นซึ่ง obviates เหตุผลอย่างสิ้นเชิงและโหลดข้อมูลพื้นที่ parser ไม่มีเหตุผลที่ดีเลยสำหรับว่าผลเดียวกันและปัญหาที่อาจเกิดขึ้นเช่นที่พวกเขาอยู่ที่: JSON ไฟล์ที่มีความคิดเห็น

หากคุณพยายามใส่ความคิดเห็นใน (ใช้//หรือ/* */หรือ#เป็นต้น) ตัวแยกวิเคราะห์บางตัวจะล้มเหลวเพราะสิ่งนี้ไม่ได้อยู่ในข้อกำหนดของ JSON อย่างเคร่งครัด ดังนั้นคุณไม่ควรทำเช่นนั้น

นี่คือตัวอย่างที่ระบบจัดการรูปภาพของฉันบันทึกสัญลักษณ์ภาพและข้อมูล (ความคิดเห็น) ที่จัดรูปแบบพื้นฐานเกี่ยวกับพวกเขา (ที่ด้านล่าง):

{
    "Notations": [
        {
            "anchorX": 333,
            "anchorY": 265,
            "areaMode": "Ellipse",
            "extentX": 356,
            "extentY": 294,
            "opacity": 0.5,
            "text": "Elliptical area on top",
            "textX": 333,
            "textY": 265,
            "title": "Notation 1"
        },
        {
            "anchorX": 87,
            "anchorY": 385,
            "areaMode": "Rectangle",
            "extentX": 109,
            "extentY": 412,
            "opacity": 0.5,
            "text": "Rect area\non bottom",
            "textX": 98,
            "textY": 385,
            "title": "Notation 2"
        },
        {
            "anchorX": 69,
            "anchorY": 104,
            "areaMode": "Polygon",
            "extentX": 102,
            "extentY": 136,
            "opacity": 0.5,
            "pointList": [
                {
                    "i": 0,
                    "x": 83,
                    "y": 104
                },
                {
                    "i": 1,
                    "x": 69,
                    "y": 136
                },
                {
                    "i": 2,
                    "x": 102,
                    "y": 132
                },
                {
                    "i": 3,
                    "x": 83,
                    "y": 104
                }
            ],
            "text": "Simple polygon",
            "textX": 85,
            "textY": 104,
            "title": "Notation 3"
        }
    ],
    "imageXW": 512,
    "imageYW": 512,
    "imageName": "lena_std.ato",
    "tinyDocs": {
        "c01": "JSON image notation data:",
        "c02": "-------------------------",
        "c03": "",
        "c04": "This data contains image notations and related area",
        "c05": "selection information that provides a means for an",
        "c06": "image gallery to display notations with elliptical,",
        "c07": "rectangular, polygonal or freehand area indications",
        "c08": "over an image displayed to a gallery visitor.",
        "c09": "",
        "c10": "X and Y positions are all in image space. The image",
        "c11": "resolution is given as imageXW and imageYW, which",
        "c12": "you use to scale the notation areas to their proper",
        "c13": "locations and sizes for your display of the image,",
        "c14": "regardless of scale.",
        "c15": "",
        "c16": "For Ellipses, anchor is the  center of the ellipse,",
        "c17": "and the extents are the X and Y radii respectively.",
        "c18": "",
        "c19": "For Rectangles, the anchor is the top left and the",
        "c20": "extents are the bottom right.",
        "c21": "",
        "c22": "For Freehand and Polygon area modes, the pointList",
        "c23": "contains a series of numbered XY points. If the area",
        "c24": "is closed, the last point will be the same as the",
        "c25": "first, so all you have to be concerned with is drawing",
        "c26": "lines between the points in the list. Anchor and extent",
        "c27": "are set to the top left and bottom right of the indicated",
        "c28": "region, and can be used as a simplistic rectangular",
        "c29": "detect for the mouse hover position over these types",
        "c30": "of areas.",
        "c31": "",
        "c32": "The textx and texty positions provide basic positioning",
        "c33": "information to help you locate the text information",
        "c34": "in a reasonable location associated with the area",
        "c35": "indication.",
        "c36": "",
        "c37": "Opacity is a value between 0 and 1, where .5 represents",
        "c38": "a 50% opaque backdrop and 1.0 represents a fully opaque",
        "c39": "backdrop. Recommendation is that regions be drawn",
        "c40": "only if the user hovers the pointer over the image,",
        "c41": "and that the text associated with the regions be drawn",
        "c42": "only if the user hovers the pointer over the indicated",
        "c43": "region."
    }
}

ลิงก์ "การใช้เหตุผล" ใช้งานไม่ได้ มีโอกาสหาลิงค์ปัจจุบันหรือไม่
Don Hatch

ดอนน่าเสียดายที่ Google ฆ่าระบบโซเชียลมีเดียที่มีการโพสต์ไว้ ฉันไม่รู้ว่าโปสเตอร์ต้นฉบับไปจากที่ใดถ้าที่ไหน ฉันจะฆ่าลิงก์ในข้อมูลข้างต้นเพื่อลบความคลุมเครือ ขอบคุณ
fyngyrz

เหตุผลไม่ได้โง่และคุณเพิ่งพิสูจน์มัน การดำเนินการแสดงความคิดเห็นเป็นแท็กรักษาการทำงานร่วมกัน นี่คือว่าทำไม Crockford ต้องการแสดงความคิดเห็นสามารถแยกวิเคราะห์เป็นแท็ก ตอนนี้ทุกอย่างเป็นเพียงแท็กและแยกวิเคราะห์ทางเดียวกัน
Dominic Cerisano

หากข้อมูลจำเพาะระบุว่า "บรรทัดที่ขึ้นต้นด้วย # คือความคิดเห็น" แสดงว่าจะใช้งานร่วมกันได้อย่างสมบูรณ์ ความคิดเห็นทั้งสองโหลดพื้นที่แยกวิเคราะห์เนื่องจากเป็นรายการแยกวิเคราะห์ที่ถูกต้องแทนที่จะเข้าใจว่าเป็นความคิดเห็นและอาจแตกต่างกันสำหรับไฟล์. json ทุกไฟล์ที่มีอยู่ ในขณะที่ถ้า (เช่น) ข้อมูลจำเพาะที่กล่าวว่า "บรรทัดที่ขึ้นต้นด้วย # คือความคิดเห็น" ตัวแยกวิเคราะห์สามารถข้ามบรรทัดเหล่านั้นโดยไม่แยกวิเคราะห์ (เร็วขึ้น) และไม่โหลดพื้นที่แยกวิเคราะห์ (ใช้หน่วยความจำดีกว่า) ไม่มีประโยชน์เลย ของความคิดเห็นใน. json ข้อเสียเท่านั้น
fyngyrz

11

หากต้องการตัดรายการ JSON เป็นส่วนฉันเพิ่มบรรทัด "ความคิดเห็นจำลอง":

{

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

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

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

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

}

15
คุณจำลองโครงสร้างไฟล์ INI ใน JSON กรุณาวางค้อนทองคำของคุณ
Artur Czajka

4
RFC พูดว่า "ชื่อภายในวัตถุควรเป็นชื่อเฉพาะ" ดูบุคคลนี้ที่มีข้อผิดพลาดในการแยกวิเคราะห์ JSON เช่นด้านบน: stackoverflow.com/questions/4912386/…
William Entriken

หากคุณกำลังใช้สคีมาเพื่อตรวจสอบความถูกต้องของ JSON มันอาจล้มเหลวเนื่องจากฟิลด์พิเศษ
gregsdennis

1
หากคุณตั้งใจที่จะเพิ่มความคิดเห็นลงใน JSON ของคุณมันจะสมเหตุสมผลมากกว่าหากทำสิ่งนี้: { "comment-001":"This is where you do abc...", "comment-002":"This is where you do xyz..." } คงชื่อไว้ไม่เหมือนใครและให้คุณเพิ่มค่าสตริงที่คุณต้องการ ยังคงเป็น kludge เนื่องจากความคิดเห็นไม่ควรเป็นส่วนหนึ่งของ JSON ของคุณ เป็นอีกทางเลือกหนึ่งทำไมไม่เพิ่มความคิดเห็นก่อนหรือหลัง JSON ของคุณ แต่ไม่ได้อยู่ข้างใน
Jazimov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.