Hoe ontsnappen aan speciale tekens bij het bouwen van een JSON string?

Hier is mijn string

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

Hier bevat het bericht een enkel aanhalingsteken, wat hetzelfde is als het aanhalingsteken dat in JSON wordt gebruikt. Wat ik doe is het vullen van een string van de gebruiker inputs, zoals bericht. Dus, ik moet ontsnappen aan dit soort speciale scenario's die de code breekt. Maar anders dan string vervangen, is er een manier om ze te laten ontsnappen, maar nog steeds HTML toestaan om ze te verwerken terug naar het juiste bericht?

Oplossing

Een JSON string moet volgens de specs double-quoted zijn, dus je hoeft ' niet te escapen.
Als je een speciaal teken in je JSON string moet gebruiken, kun je het escapen met ' teken.

Zie deze lijst van speciale karakter gebruikt in JSON :

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character


Maar zelfs als het volledig in strijd is met de spec, zou de auteur `' kunnen gebruiken.

Dit is slecht omdat :

  • Het IS in strijd met de specs
  • Het is niet langer een JSON geldige string
Maar het werkt, of je het nu wilt of niet.

Voor nieuwe lezers, gebruik altijd dubbele aanhalingstekens voor je json strings.

Commentaren (18)

Iedereen heeft het over hoe je ' in een '-quoted string literal moet escapen. Er is een veel groter probleem hier: Single-quoted string literals zijn't geldige JSON. JSON is gebaseerd op JavaScript, maar het's niet hetzelfde. Als je'een object letterlijk binnen JavaScript code schrijft, prima; als je echt JSON nodig hebt, moet je " gebruiken.

Met dubbele aanhalingstekens, zult u niet nodig om de ' te ontsnappen. (En als je wel een letterlijke " in de string wilt, gebruik je ").

Commentaren (2)

betreffende AlexB's post:

 \'  Apostrophe or single quote
 \"  Double quote

escaping enkele aanhalingstekens is alleen geldig in json strings met enkele aanhalingstekens
escaping dubbele aanhalingstekens is alleen geldig in json strings met dubbele aanhalingstekens

voorbeeld:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid
Commentaren (2)