Questo la risposta presuppone che tu voglia veramente scrivere un parser e sei pronto a fare lo sforzo richiesto.
È NECESSARIO iniziare con le specifiche formali di JSON. Ho trovato http://www.ietf.org/rfc/rfc4627.txt. Questo definisce la lingua con precisione. DEVI implementare tutto nelle specifiche e scrivere test per questo. Il parser DEVE gestire il JSON errato (come il tuo) e lanciare Eccezioni.
Se si desidera scrivere un parser, fermarsi, pensare e quindi non farlo. È molto lavoro per farlo funzionare correttamente. Qualunque cosa facciate, fatene un buon lavoro - i parser incompleti sono una minaccia e non dovrebbero mai essere distribuiti.
È NECESSARIO scrivere il codice conforme. Ecco alcune frasi dalla specifica. Se non li si capisce si deve la ricerca con attenzione e assicurarsi di aver compreso: "il testo JSON sono codificati in Unicode La codifica predefinita è UTF-8".
"Un parser JSON DEVE accettare tutti i testi conformi alla grammatica JSON ."
" Considerazioni sulla codifica: 8 bit se UTF-8; binario se UTF-16 o UTF-32
JSON may be represented using UTF-8, UTF-16, or UTF-32. When JSON
is written in UTF-8, JSON is 8bit compatible. When JSON is
written in UTF-16 or UTF-32, the binary content-transfer-encoding
must be used.
"
" Qualsiasi carattere può essere sfuggito. Se il carattere è nella Base
Multilingual Plane (U + 0000 a U + FFFF), allora può essere
rappresentato come una sequenza di sei caratteri: un solidus inversa, seguita
dalla lettera minuscola u, seguita da quattro cifre esadecimali che
codificano il punto di codice del carattere. Le lettere esadecimali A anche se
F possono essere maiuscole o minuscole. Ad esempio, una stringa contenente
un solo carattere di solidus inverso può essere rappresentata come
"\ u005C". "
Se si capisce questo e ancora voglia di scrivere un parser, quindi rivedere alcuni altri parser, e vedere se qualcuno di loro hanno test di conformità. Prendere in prestito questi per la propria applicazione.
Se siete ancora dovresti prendere in seria considerazione l'utilizzo di un generatore di parser, ad esempio JAVACC, CUP e il mio strumento preferito, ANTLR. ANTLR è molto potente ma può essere difficile da iniziare.Vedi anche il suggerimento di Parboiled, che ora consiglierei. semplice e sarebbe un esercizio utile.La maggior parte dei parser-generatori generano un parser completo che può creare codice eseguibile o generare l'albero di analisi del tuo JSON
C'è un generatore di parser JSON che usa ANTLR allo http://www.antlr.org/wiki/display/ANTLR3/JSON+Interpreter se è permesso dare un'occhiata. Ho anche appena scoperto un Parboiled parser-generator for JSON. Se il motivo principale per cui scrivi un parser è imparare a farlo, questo è probabilmente un buon punto di partenza.
Se non è consentito (o non si desidera) utilizzare un generatore di parser, sarà necessario creare il proprio parser. Questo in genere si presenta in due parti:
un lexer/tokenizer. Questo riconosce le primitive di base definite nella specifica del linguaggio. In questo caso dovrebbe riconoscere parentesi graffe, virgolette, ecc. Probabilmente creerebbe anche la rappresentazione dei numeri.
un albero sintattico astratto (http://en.wikipedia.org/wiki/Abstract_syntax_tree, AST) generatore. Qui scrivi il codice per assemblare un albero che rappresenta l'astrazione del tuo JSON (ad esempio, gli spazi bianchi e le curse sono stati scartati).
Quando si dispone dell'AST, dovrebbe essere facile scorrere i nodi e creare l'output desiderato.
Ma scrivere generatori di parser, anche per un linguaggio semplice come JSON, è molto lavoro.
Perché non usi [Gson] (https://code.google.com/p/google-gson/)? –
Questo NON è JSON valido! – fge
[Cosa hai provato] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) finora oltre a chiederci? –