คุณสามารถใช้เครื่องหมายจุลภาคต่อท้ายในวัตถุ JSON ได้หรือไม่?


392

เมื่อสร้างวัตถุหรืออาร์เรย์ JSON ด้วยตนเองมักจะง่ายกว่าการใช้เครื่องหมายจุลภาคต่อท้ายในรายการสุดท้ายในวัตถุหรืออาร์เรย์ ตัวอย่างเช่นโค้ดที่จะส่งออกจากอาเรย์ของสตริงอาจมีลักษณะ (ใน C ++ เช่น pseudocode):

s.append("[");
for (i = 0; i < 5; ++i) {
    s.appendF("\"%d\",", i);
}
s.append("]");

ให้สตริงเหมือนคุณ

[0,1,2,3,4,5,]

ได้รับอนุญาตหรือไม่


66
มันเป็นสิ่งที่ฉันต้องการเพื่อค้นหาบนเว็บเมื่อไม่กี่วันที่ผ่านมา ฉันไม่เห็นคำตอบที่นี่ดังนั้นดังนั้นในการติดตามภารกิจของไซต์ฉันโพสต์คำถามและตอบคำถามเพื่อให้ผู้อื่นสามารถค้นหาได้ นี่คือสิ่งที่ Jeff พูดอย่างชัดเจนว่าเขาต้องการทำที่นี่
Ben Combee

5
อย่างที่ Jeff พูดฉันคิดว่ามันดีที่จะใช้ SO เป็น 'สมุดบันทึก' ของสิ่งต่าง ๆ ที่คุณต้องใช้เวลาในการค้นหา แน่นอนว่านี่เป็นจุดสิ้นสุดที่เรียบง่ายของรายการประเภทนั้น แต่ฉันก็ยังคิดว่าเหมาะสมโดยเฉพาะอย่างยิ่งเนื่องจากเครื่องมือจาวาสคริปต์ที่แตกต่างกันจะจัดการกับสิ่งนี้แตกต่างกัน
pkaeding

6
ฉันก็สงสัยเช่นกันดังนั้นจึงเป็นคำถามที่เหมาะสมอย่างยิ่ง
hoju

48
สำหรับทุกคนที่มีคนถามคำถามง่าย ๆ โปรดกลับออกไป นี่เป็นหนึ่งในเพลงฮิตครั้งแรกใน google และมันช่วยให้ฉันอ้างอิงคำตอบได้อย่างรวดเร็ว ขอบคุณ OP

40
ที่น่าสนใจ (หรือน่ากลัว) ใน IE 8 ฉันเพิ่งพบว่าalert([1, 2, 3, ].length)จะแสดง "4"
Daniel Earwicker

คำตอบ:


250

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

โดยทั่วไปแล้วฉันลองแก้ไขปัญหาและเพิ่มเครื่องหมายจุลภาคก่อนค่าจริงดังนั้นคุณจึงจบลงด้วยรหัสที่มีลักษณะดังนี้:

s.append("[");
for (i = 0; i < 5; ++i) {
  if (i) s.append(","); // add the comma only if this isn't the first entry
  s.appendF("\"%d\"", i);
}
s.append("]");

โค้ดพิเศษหนึ่งบรรทัดในลูปของคุณนั้นมีราคาแพงมาก ...

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

ใช้งานไม่ได้กับอาเรย์


2
ฉันเริ่มใช้การจัดรูปแบบนี้ในรหัส JS ทั้งหมดของฉัน (เครื่องหมายจุลภาคก่อนรายการในบรรทัดเดียวกัน) ด้วยเหตุผลนี้ ทำให้คอมม่าต่อท้ายง่ายขึ้นมากในการมองเห็นและประหยัดเวลาได้มาก มันน่ารำคาญฉันหวังว่าจะมีตัวเลือกในการโยนข้อผิดพลาดสำหรับเรื่องนี้ด้วย firefox (เนื่องจากจะช่วยในการแก้ไขข้อบกพร่อง)
rocketmonkeys

47
มันเป็นความอัปยศที่ ECMA5 ระบุเส้นทาง แต่ JSON ไม่
FlavourScape

4
ใช่บรรทัดพิเศษนั้นแทบจะไม่แพงเลย แต่สิ่งที่น่ารำคาญก็คือ
René Nyffenegger

2
วิธีนี้ใช้ได้กับการทำดัชนีแบบลูป วิธีการเกี่ยวกับ ... ในลูปสไตล์? มีวิธีที่สง่างาม?
kgf3JfUtW

2
โค้ดพิเศษหนึ่งบรรทัดนั้นอาจซับซ้อนเมื่อจัดการกับคุณสมบัติ คุณอาจพบว่าตัวเองมีตันมากมายifเพื่อหลีกเลี่ยงจุลภาคตัวเล็ก ๆ ที่โง่ เกี่ยวกับค่าใช้จ่าย YMMV ดูตัวอย่างนี้ได้ที่jsfiddle.net/oriadam/mywL9384 คำอธิบาย: โซลูชันของคุณยอดเยี่ยมฉันแค่เกลียดรายละเอียดที่ห้ามคอมม่าที่ต่อท้าย
oriadam

133

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

รหัสข้างต้นสามารถปรับโครงสร้างใหม่ได้ไม่ว่าจะเป็นการลบเครื่องหมายจุลภาคต่อท้ายเมื่อเพิ่มเทอร์มิเนเตอร์เทอร์มิเนเตอร์หรือเพื่อเพิ่มจุลภาคก่อนรายการ


1
ECMA 262 ดูเหมือนจะกำหนดไว้ในส่วน 11.1.5-Object Initialiser ไม่ว่าจะดีหรือไม่ดูเหมือนว่าจะอยู่ในสเป็ค
Zero Distraction

6
การเป็น ECMAScript ที่ถูกต้องไม่ได้แปลว่าเอกสารนั้นมีความถูกต้อง JSON - JSON นั้นถูกกำหนดโดยทั่วไปในRFC 4627และ spec นั้นไม่อนุญาตให้ใช้จุลภาคต่อท้าย
Tim Gilbert

1
@ ZeroDistraction: ECMA262 กำหนด ECMAscript (หรือที่เรียกว่า javascript) ซึ่งเป็นภาษาโปรแกรมเช่น Perl หรือ Ruby หรือ C ++ หรือ Java JSON เป็นรูปแบบข้อมูลเช่น XML หรือ CSV หรือ YAML พวกเขาไม่เหมือนกัน JSON ไม่มีอยู่ใน EXMA262 แต่ไวยากรณ์ที่ได้มาจากการทำและมันเรียกว่าสัญกรณ์ตัวอักษรของวัตถุ (ON ใน JSON)
slebetman

106

เรียบง่ายราคาถูกอ่านง่ายและใช้งานได้เสมอโดยไม่คำนึงถึงรายละเอียด

$delimiter = '';
for ....  {
    print $delimiter.$whatever
    $delimiter = ',';
}

การมอบหมายซ้ำซ้อนให้กับ $ delim เป็นราคาที่เล็กมากที่ต้องจ่าย ใช้งานได้เช่นกันหากไม่มีลูปอย่างชัดเจน แต่แยกส่วนของโค้ด


1
นั่นคือสิ่งที่ฉันมักจะทำในสถานการณ์เช่นนี้ ฉันรู้สึกว่าการมอบหมายพิเศษมากกว่าการชดเชยโดยการกำจัดเงื่อนไขที่จำเป็นสำหรับการเพิ่มเครื่องหมายจุลภาคต่อท้ายค่าในแนวทางอื่น ( stackoverflow.com/a/201856/8946 )
Lawrence Dol

5
ฉันไม่ชอบโซลูชันนี้เนื่องจากมีตัวแปรอื่นที่ทำให้ขอบเขตของฉันแย่ หนึ่งifง่ายต่อการเข้าใจ แต่ขอบคุณสำหรับการแบ่งปัน
Ich

3
นอกจากนี้ยังเป็นการดีกว่าที่จะมีขอบเขตของตัวคั่น:for(let ..., sep=""; ... ; sep=",") { ...
Lawrence Dol

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

21

เครื่องหมายจุลภาคต่อท้ายได้รับอนุญาตใน JavaScript แต่ไม่ทำงานใน IE ข้อมูลจำเพาะ JSON ที่ไม่มีเวอร์ชันของ Douglas Crockford ไม่อนุญาตให้ใช้และเนื่องจากเป็นเวอร์ชันนี้จึงไม่ควรเปลี่ยน ข้อมูลจำเพาะ ES5 JSON อนุญาตให้พวกเขาเป็นส่วนขยาย แต่RFC 4627ของ Crockford ไม่ได้ทำและ ES5 กลับไปเป็นไม่อนุญาต Firefoxตามหลังชุดสูท Internet Explorer คือเหตุผลที่เราไม่มีสิ่งที่ดี


1
ฉันเพิ่งลองพวกเขาใน IE 11 โดยไม่มีปัญหา คุณได้ทดสอบ IE เวอร์ชันใดที่คุณพบว่าทำให้เกิดปัญหา
iconoclast

10
ดูเหมือน Crockford คือเหตุผลที่เราไม่สามารถมีสิ่งที่ดี และความคิดเห็นใน JSON
Hejazzman

ทำไมพูดถึงเว็บเบราว์เซอร์เมื่อ OP ใช้ C ++ เช่น pseudocode ไม่น่าเป็นไปได้ที่คำถามของ OP เกี่ยวข้องกับเว็บเบราว์เซอร์หรือ JavaScript
ประสานงาน

@cowlinator J ava S cript O bject N otation
forresthopkinsa

1
ตัวอักษรของวัตถุจาวาสคริปต์เป็นแรงบันดาลใจให้กับรูปแบบ แต่ JSON ไม่ได้มีไว้สำหรับเอนจิ้น Javascript
เอ็นจิ้

13

ดังที่ได้กล่าวไปแล้วข้อมูลจำเพาะ JSON (อิงตาม ECMAScript 3) ไม่อนุญาตให้ใช้จุลภาคต่อท้าย ES> = 5 อนุญาตดังนั้นคุณสามารถใช้สัญกรณ์นั้นใน JS บริสุทธิ์ได้ มันเป็นเรื่องที่ถกเถียงกันเกี่ยวกับและ parsers บางส่วนไม่สนับสนุนมัน ( http://bolinfest.com/essays/json.html , http://whereswalden.com/2010/09/08/spidermonkey-json-change-trailing-commas- ไม่เป็นที่ยอมรับอีกต่อไป / ) แต่เป็นข้อเท็จจริงเฉพาะ (ดังที่แสดงในhttp://json.org/ ) ว่าไม่ควรทำงานใน JSON สิ่งนั้นพูดว่า ...

... ฉันสงสัยว่าทำไมไม่มีใครชี้ให้เห็นว่าจริง ๆ แล้วคุณสามารถแบ่งลูปที่การวนซ้ำที่ 0 และใช้เครื่องหมายจุลภาคชั้นนำแทนการลากหนึ่งเพื่อกำจัดกลิ่นรหัสเปรียบเทียบและค่าประสิทธิภาพที่แท้จริงในลูปทำให้เกิด รหัสที่สั้นกว่าง่ายกว่าและเร็วกว่า (เนื่องจากไม่มีการแยกสาขา / เงื่อนไขในลูป) กว่าโซลูชันอื่นที่เสนอ

เช่น (ใน C-style pseudocode คล้ายกับรหัสที่เสนอของ OP):

s.append("[");
// MAX == 5 here. if it's constant, you can inline it below and get rid of the comparison
if ( MAX > 0 ) {
    s.appendF("\"%d\"", 0); // 0-th iteration
    for( int i = 1; i < MAX; ++i ) {
        s.appendF(",\"%d\"", i); // i-th iteration
    }
}
s.append("]");

3
ตัวอย่างโค้ดที่ง่ายและรวดเร็ว ดีกว่าการแก้ปัญหาคำตอบอื่น ๆ ที่เสนอ
เทรเวอร์ Jex

12

โคด PHP อาจต้องการตรวจสอบระเบิด () สิ่งนี้ต้องใช้อาร์เรย์รวมเข้าด้วยกันโดยใช้สตริง

จากเอกสาร ...

$array = array('lastname', 'email', 'phone');
echo implode(",", $array); // lastname,email,phone

2
ในทำนองเดียวกันมี JavaScript เข้าร่วม () ภาษาส่วนใหญ่มีวิธีการที่คล้ายกันหรือสามารถเข้ารหัสได้อย่างง่ายดาย
Dan Burton

16
PHP มี json_encode ซึ่งจัดการรายละเอียดทั้งหมดในการสร้าง JSON ไม่ใช่แค่เครื่องหมายจุลภาค
Brilliand

เยี่ยมมาก! มันใช้กับ JSON ได้อย่างไรและมันช่วย OP ในการแก้ไขคำถามของพวกเขาได้อย่างไร จำไว้ว่า "คุณสามารถใช้จุลภาคต่อท้ายในวัตถุ JSON ได้หรือไม่" คือคำถาม
Rockin4Life33

7

ที่น่าสนใจทั้ง C & C ++ (และฉันคิดว่า C # แต่ฉันไม่แน่ใจ) ให้เครื่องหมายจุลภาคต่อท้ายโดยเฉพาะ - ด้วยเหตุผลที่กำหนด: มันทำให้การสร้างรายการทางโปรแกรมง่ายขึ้นมาก ไม่แน่ใจว่าทำไม JavaScript ไม่ทำตามเป้าหมาย


13
ECMA ได้ระบุไว้อย่างชัดเจนว่าอนุญาตให้ใช้จุลภาคต่อท้ายในสเปคที่จะเกิดขึ้น: ejohn.org/blog/bug-fixes-in-javascript-2 แต่อีกเหตุผลที่ชัดเจนว่า JSON! = JS Object
เปลือกตา

PHP ยังช่วยให้มัน ฉันคิดว่ามันเป็นคุณสมบัติหนึ่งของ PHP ที่ฉันชอบ ; p
iconoclast

4

ใช้ JSON5 อย่าใช้ JSON

  • วัตถุและอาร์เรย์สามารถมีเครื่องหมายจุลภาคต่อท้าย
  • ปุ่มวัตถุสามารถยกเลิกการอ้างอิงได้หากเป็นตัวระบุที่ถูกต้อง
  • สตริงสามารถเสนอราคาเดียว
  • สตริงสามารถแบ่งได้หลายบรรทัด
  • ตัวเลขสามารถเป็นเลขฐานสิบหก (ฐาน 16)
  • ตัวเลขสามารถเริ่มต้นหรือสิ้นสุดด้วยจุดทศนิยม (นำหน้าหรือต่อท้าย)
  • ตัวเลขอาจรวมถึง Infinity และ -Infinity
  • ตัวเลขสามารถขึ้นต้นด้วยเครื่องหมายบวก (+) อย่างชัดเจน
  • อนุญาตให้แสดงความคิดเห็นทั้งแบบอินไลน์ (บรรทัดเดียว) และบล็อก (หลายบรรทัด)

http://json5.org/

https://github.com/aseemk/json5


ดูดี แต่ไม่ได้เพิ่มประเภทข้อมูลใหม่ดูเหมือนจะเป็นโอกาสที่ไม่ได้รับ ... แน่นอนว่าความปรารถนาที่จะยังคงเป็นเซตย่อยที่เข้มงวดของ ECMAScript 5 บังคับว่า แต่ก็ยัง ...
iconoclast

1
นอกจากนี้สตริง mutliline แย่มาก ฉันฝันถึงหลาย ES6
Marco Sulla

10
ไม่นั่นคือคำแนะนำที่น่ายินดี จากไลบรารี JSON ที่มีอยู่ทั้งหมดมีน้อยมากที่สนับสนุนส่วนขยายดังกล่าว และทั้งหมดนี้สำหรับ "การปรับปรุง" ที่น่าสงสัยมาก โปรดอย่าทำให้เกิดการกัดเซาะของความสามารถในการทำงานร่วมกันโดยส่วนขยายปลอมใหม่เช่นนี้
StaxMan

7
ฉันเชื่อว่าการใช้ชีวิตของคุณเพื่อแก้ไขเครื่องหมายจุลภาคนั้นน่ากลัวยิ่งกว่าเดิม
user619271

3

มีวิธีที่เป็นไปได้ที่จะหลีกเลี่ยง if-branch ในลูป

s.append("[ "); // there is a space after the left bracket
for (i = 0; i < 5; ++i) {
  s.appendF("\"%d\",", i); // always add comma
}
s.back() = ']'; // modify last comma (or the space) to right bracket

2

ตามข้อกำหนดClass JSONArray :

  • อาจมีเครื่องหมายจุลภาคพิเศษ (เครื่องหมายจุลภาค) ปรากฏอยู่หน้าวงเล็บปิด
  • ค่า null จะถูกแทรกเมื่อมี, (เครื่องหมายจุลภาค) elision

ดังนั้นที่ฉันเข้าใจมันควรได้รับอนุญาตให้เขียน:

[0,1,2,3,4,5,]

แต่อาจเกิดขึ้นได้ที่ตัวแยกวิเคราะห์บางตัวจะคืนค่า 7 ตามจำนวนรายการ (เช่น IE8 ตามที่ Daniel Earwicker ชี้) แทนที่จะเป็น 6 ที่คาดไว้


แก้ไข:

ฉันพบJSON Validatorที่ตรวจสอบความถูกต้องของสตริง JSON กับRFC 4627 (ประเภทสื่อแอปพลิเคชัน / json สำหรับสัญลักษณ์วัตถุ JavaScript) และกับข้อกำหนดภาษา JavaScript จริงๆแล้วที่นี่อาร์เรย์ที่มีเครื่องหมายจุลภาคต่อท้ายจะถือว่าใช้ได้สำหรับ JavaScript เท่านั้นและไม่ใช่สำหรับข้อกำหนด RFC 4627

อย่างไรก็ตามในสเปค RFC 4627 ระบุไว้ว่า:

2.3 อาร์เรย์

โครงสร้างอาเรย์ถูกแสดงเป็นวงเล็บเหลี่ยมโดยรอบศูนย์หรือมากกว่าค่า (หรือองค์ประกอบ) องค์ประกอบถูกคั่นด้วยเครื่องหมายจุลภาค

array = begin-array [ value *( value-separator value ) ] end-array

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

PS RFC 4627 ไม่ใช่มาตรฐาน (ตามที่ระบุไว้อย่างชัดเจน) และได้รับการยกเลิกโดย RFC 7159 แล้ว (ซึ่งเป็นมาตรฐานที่เสนอ) RFC 7159


6
กฎไวยากรณ์ที่ให้มามีความแม่นยำเท่าที่คุณจะได้รับ ไม่มีทางที่จะมีตัวvalue-separatorเลือกvalueข้างขวา ข้อความก็เฉพาะเจาะจงมาก "การแยกค่า" สามารถใช้ได้หากมีหลายค่า ดังนั้นหากคุณมีสองค่าติดกันค่าเหล่านั้นจะถูกคั่นด้วยเครื่องหมายจุลภาค หากคุณมีหนึ่งค่า (หรือถ้าคุณดูเฉพาะค่าที่จุดสิ้นสุด) จะไม่มีการแยกดังนั้นจึงไม่มีเครื่องหมายจุลภาค
Steffen Heil

1

จากประสบการณ์ที่ผ่านมาฉันพบว่าเบราว์เซอร์ที่แตกต่างกันจัดการกับเครื่องหมายจุลภาคต่อท้ายใน JSON แตกต่างกัน

ทั้ง Firefox และ Chrome จัดการได้ดี แต่ดูเหมือนว่า IE (ทุกรุ่น) จะพัง ฉันหมายถึงหยุดพักและหยุดอ่านสคริปต์ที่เหลือ

โปรดจำไว้และความจริงที่ว่ามันเป็นสิ่งที่ดีที่จะเขียนโค้ดที่สอดคล้องกันฉันขอแนะนำให้ใช้ความพยายามพิเศษเพื่อให้แน่ใจว่าไม่มีเครื่องหมายจุลภาคต่อท้าย

:)


1

ฉันเก็บจำนวนปัจจุบันและเปรียบเทียบกับจำนวนทั้งหมด หากจำนวนปัจจุบันน้อยกว่าจำนวนทั้งหมดฉันจะแสดงเครื่องหมายจุลภาค

อาจไม่ทำงานหากคุณไม่มีการนับรวมก่อนดำเนินการสร้าง JSON

จากนั้นอีกครั้งหากคุณใช้ PHP 5.2.0 หรือดีกว่าคุณสามารถฟอร์แมตการตอบสนองของคุณโดยใช้ JSON API ในตัว


1

ด้วย Relaxed JSON คุณสามารถมีเครื่องหมายจุลภาคต่อท้ายหรือเพียงแค่ใช้เครื่องหมายจุลภาคหรือเพียงแค่ปล่อยให้เครื่องหมายจุลภาคออกพวกเขาเป็นตัวเลือก

ไม่มีเหตุผลที่ต้องใช้จุลภาคในการแยกวิเคราะห์เอกสารที่เหมือน JSON

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

http://www.relaxedjson.org

คุณยังสามารถลองตัวอย่างของคุณโดยใช้ตัวแยกวิเคราะห์ RJSON ออนไลน์นี้และดูว่าได้รับการแยกวิเคราะห์อย่างถูกต้อง

http://www.relaxedjson.org/docs/converter.html?source=%5B0%2C1%2C2%2C3%2C4%2C5%2C%5D


JSon ที่ผ่อนคลายไม่ใช่ JSON ดังนั้นจึงไม่สามารถใช้งานได้ในทางเทคนิค
user2864740

คุณสามารถแปลง rjson เป็นและจาก json ดังนั้นจึงสามารถใช้งานได้อย่างสมบูรณ์ ง่ายมากที่จะเพิ่มไปยังเวิร์กโฟลว์ของคุณด้วย
Steven Spungin

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

OP ใช้สตริงเริ่มต้นด้วย สตริงอาจถูกแยกไปjson objectใช้หรือโดยการใช้ห้องสมุดJSON.parse RJSON.parseฉันจะเห็นด้วยกับคุณถ้าแหล่งที่มาเป็นวัตถุ แต่นั่นไม่ใช่กรณีที่นี่ ฉันไม่เห็นว่าในคำถามที่กล่าวถึงการdownstreamบริโภควัตถุหรือสตริง
Steven Spungin

"เมื่อสร้างวัตถุหรืออาร์เรย์JSONด้วยตนเองมักจะง่ายกว่าการใส่เครื่องหมายจุลภาคต่อท้ายในรายการสุดท้ายในวัตถุหรืออาร์เรย์ .. สิ่งนี้ได้รับอนุญาต [ ใน JSON ] หรือไม่" - ดังนั้นอีกครั้ง: แม้ว่ารูปแบบนี้เป็นรูปแบบทางเลือกที่น่าสนใจ แต่ไม่ใช่ JSONและไม่สามารถใช้กับเทคนิคเกี่ยวกับคำถามเกี่ยวกับJSONได้ ไม่มีอะไรที่จะ "ป้องกัน": มันเป็นข้อเสนอ Z เพื่อตั้งคำถาม X
2864740

0

ฉันมักจะวนรอบอาร์เรย์และแนบเครื่องหมายจุลภาคหลังจากทุกรายการในสตริง หลังจากลูปฉันลบคอมม่าสุดท้ายอีกครั้ง

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



0

เนื่องจาก for-loop ถูกใช้เพื่อวนซ้ำอาร์เรย์หรือโครงสร้างข้อมูลที่คล้ายกันเราจึงสามารถใช้ความยาวของอาร์เรย์ดังที่แสดง

awk -v header="FirstName,LastName,DOB" '
  BEGIN {
    FS = ",";
    print("[");
    columns = split(header, column_names, ",");
  }
  { print("  {");
    for (i = 1; i < columns; i++) {
      printf("    \"%s\":\"%s\",\n", column_names[i], $(i));
    }
    printf("    \"%s\":\"%s\"\n", column_names[i], $(i));
    print("  }");
  }
  END { print("]"); } ' datafile.txt

ด้วย datafile.txt ที่มี

 Angela,Baker,2010-05-23
 Betty,Crockett,1990-12-07
 David,Done,2003-10-31

0

ตามที่ระบุไว้ไม่อนุญาต แต่ใน JavaScript นี่คือ:

var a = Array()
for(let i=1; i<=5; i++) {
    a.push(i)
}
var s = "[" + a.join(",") + "]"

(ทำงานได้ดีใน Firefox, Chrome, Edge, IE11 และไม่มีการอนุญาตใน IE9, 8, 7, 5)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.