Come fare l'escape dei caratteri speciali nella costruzione di una stringa JSON?

Ecco la mia stringa

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

Qui il messaggio contiene singole virgolette, che è lo stesso delle virgolette usate in JSON. Quello che faccio è riempire una stringa dagli input dell'utente come il messaggio. Quindi, ho bisogno di sfuggire a questo tipo di scenari speciali che rompe il codice. Ma oltre alla sostituzione delle stringhe, c'è un modo per farle sfuggire ma permettere comunque all'HTML di elaborarle di nuovo nel messaggio corretto?

Soluzione

Una stringa JSON deve essere citata due volte, secondo le specifiche, quindi non c'è bisogno di fare l'escape '.
Se devi usare un carattere speciale nella tua stringa JSON, puoi fare l'escape usando il carattere ```.

Vedi questa lista di caratteri speciali usati 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

br />

Tuttavia, anche se è totalmente contrario alle specifiche, l'autore potrebbe usare '.

Questo è cattivo perché : ¶ ul> È contrario alle specifiche

  • /li> non è più una stringa JSON valida
  • /ul> Ma funziona, che tu lo voglia o no.

    **Per i nuovi lettori, usate sempre un doppio apice per le vostre stringhe json.

    Commentari (18)

    Tutti parlano di come fare l'escape 'in un letterale di stringa 'quoted. C'è un problema molto più grande qui: I letterali di stringa tra virgolette non sono validi per JSON. JSON è basato su JavaScript, ma non è la stessa cosa. Se stai scrivendo un letterale di oggetto all'interno del codice JavaScript, bene; se hai effettivamente bisogno di JSON, devi usare ".

    Con le stringhe tra virgolette doppie, non avrete bisogno di sfuggire all' '. (E se vuoi un letterale " nella stringa, userai ".)

    Commentari (2)

    per quanto riguarda il post di AlexB's:

     \'  Apostrophe or single quote
     \"  Double quote

    l'escape delle virgolette singole è valido solo nelle stringhe json tra virgolette singole l'escape delle virgolette doppie è valido solo nelle stringhe json tra virgolette doppie

    esempio:

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