452 Stimmen

Kann man in einem JSON-Objekt ein nachgestelltes Komma verwenden?

Bei der manuellen Erstellung eines JSON-Objekts oder -Arrays ist es oft einfacher, ein Komma am letzten Element des Objekts oder Arrays stehen zu lassen. Der Code für die Ausgabe aus einem Array von Strings könnte zum Beispiel so aussehen (in einem C++-ähnlichen Pseudocode):

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

Sie erhalten eine Zeichenkette wie

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

Ist das erlaubt?

3voto

Nein. Die "Eisenbahndiagramme" in https://json.org sind eine exakte Übersetzung der Spezifikation und machen deutlich, dass eine , steht immer vor einer value , noch nie zuvor direkt ] :

railroad diagram for array

ou } :

railroad diagram for object

2voto

Timoty Weis Punkte 170

Nach Angaben der Spezifikation der Klasse JSONArray :

  • Ein zusätzliches , (Komma) kann unmittelbar vor der schließenden Klammer stehen.
  • Der Nullwert wird eingefügt, wenn es eine , (Komma) Elision gibt.

So wie ich es verstehe, sollte es also erlaubt sein, zu schreiben:

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

Es kann jedoch vorkommen, dass einige Parser die 7 als Elementanzahl zurückgeben (wie IE8, worauf Daniel Earwicker hingewiesen hat), anstatt der erwarteten 6.


編集しました。

Ich fand dies JSON-Prüfer die eine JSON-Zeichenkette gegen RFC 4627 (Der Medientyp application/json für JavaScript Object Notation) und gegen die JavaScript-Sprachspezifikation. Hier wird ein Array mit einem nachgestellten Komma nur für JavaScript und nicht für die RFC 4627-Spezifikation als gültig angesehen.

In der RFC 4627-Spezifikation heißt es jedoch, dass:

2.3. Arrays

Eine Array-Struktur wird durch eckige Klammern dargestellt, die Nullen umgeben oder mehrere Werte (oder Elemente). Die Elemente werden durch Kommas getrennt.

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

Für mich ist das wieder ein Interpretationsproblem. Wenn Sie schreiben, dass Elemente werden durch Kommas getrennt (ohne etwas über Sonderfälle, wie das letzte Element, zu sagen), könnte es auf beide Arten verstanden werden.

P.S. RFC 4627 ist kein Standard (wie ausdrücklich angegeben) und wurde bereits durch RFC 7159 (ein vorgeschlagener Standard) überholt. RFC 7159

1voto

feibing Punkte 19

Es wird nicht empfohlen, aber Sie können trotzdem so vorgehen, um es zu analysieren.

jsonStr = '[0,1,2,3,4,5,]';
let data;
eval('data = ' + jsonStr);
console.log(data)

1voto

Steven Spungin Punkte 22085

Mit Relaxed JSON können Sie nachgestellte Kommas verwenden, oder einfach die Kommas weglassen . Sie sind fakultativ.

Es gibt überhaupt keinen Grund, warum Kommas vorhanden sein müssen, um ein JSON-ähnliches Dokument zu parsen.

Schauen Sie sich die entspannte JSON-Spezifikation an und Sie werden sehen, wie "verrauscht" die ursprüngliche JSON-Spezifikation ist. Viel zu viele Kommas und Anführungszeichen...

http://www.relaxedjson.org

Sie können Ihr Beispiel auch mit diesem Online-RJSON-Parser ausprobieren und sehen, wie es korrekt geparst wird.

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

1voto

theking2 Punkte 1467

Wie bereits erwähnt, ist dies nicht zulässig. Aber in JavaScript ist es erlaubt:

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

(funktioniert gut in Firefox, Chrome, Edge, IE11, und ohne das let in IE9, 8, 7, 5)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X