2010-06-01 12 views
9

Sto utilizzando il file net.sf.json.JSONObject per creare alcuni dati da inviare a un'applicazione front-end e il codice con cui sto interagendo non mi piace il modo in cui aggiunge la citazione segna per ogni nome di campo.Rimozione delle virgolette in JSONObject

Ad esempio:

myString = new JSONObject().put("JSON", "Hello, World!").toString(); 

produce la stringa { "JSON": "Ciao, mondo"}.

Quello che voglio che venga restituito è {JSON: "Hello, World"} - senza virgolette attorno a "JSON". Cosa devo fare per farlo accadere?

+0

Perché vuoi farlo? (Sono curioso) – OscarRyz

+0

Perché sto interagendo con il codice esistente che piace così. (ho appena modificato la domanda originale per renderla più chiara.) –

risposta

1

Il javadoc dice

I testi prodotti dal toString metodi rigorosamente conformi alle norme sysntax JSON .

Se si desidera conformarsi alle regole di sintassi JSON, non rimuovere le virgolette.

Oppure, se non ti interessa le regole, potresti creare il tuo metodo semplice per contrarre queste stringhe.

Inoltre, sostituire le prime due occorrenze delle virgolette è valido, come dice @CharlesLeaf.

1

Posso chiederti perché vuoi farlo? Non salverà la maggior parte dei byte totali trasferiti nella richiesta.

In ogni caso, direi che devi scrivere qualcosa, un'espressione regolare o qualcos'altro, che sostituisce /\"([^"]+)\"\:/ alla prima partita $1. Non parlo fluentemente Java, quindi non posso più aiutarlo.

+0

Sto provando a cambiare qualche codice di back-end senza rovinare molto con il front-end ... e il front-end non sembra gradire le virgolette. Quindi sto solo cercando di dare al front-end ciò che vuole. –

+1

Sembra un bug nel front-end.Ma in ogni caso, la mia espressione regolare dovrebbe essere in grado di aiutarti. Sostituisci '\" ([^ "] +) \" \: 'con' $ 1: 'in qualsiasi modo che dovrebbe funzionare in Java.' $ 1' corrisponderebbe, nel tuo esempio 'JSON'. – CharlesLeaf

+0

Sì, lo farà ... Quando trasferisci una tonnellata di dati su websocket con nodejs, la quantità di dati che stai salvando sulle pipe senza trasferire le virgolette doppie è immensa: –

1

Il JSON definition descrive ogni coppia come una stringa: valore, quindi non ci si può aspettare che le librerie net.sf contravvengano a quel particolare contratto. Se sei preoccupato di poter accedere ai valori quando vengono restituiti ad un codice javascript (se è quello che stai facendo), non è necessario.

var str = {"JSON": "Hello, World"}; 
var obj = eval(str); 
alert(obj.JSON); // Alerts "Hello, World" 
+0

Se OP vuole una stringa penso che sia ok, ma se OP vuole per creare un oggetto da {"JSON": "Hello world"}, può usare 'jQuery.parseJSON (" una stringa json qui ");' –

0

È possibile utilizzare il seguente metodo per escludere citazioni da nome della proprietà nel JSON:

net.sf.json.util.WebUtils.toString(JSONObject);

Fare riferimento alle Java doc:

5

ho incontrato un paio di librerie/applicazioni web come amCharts che supportano JSON come input JavaScipt dove è necessaria la tua richiesta poiché il vero JSON non è supportato.

Quello che puoi fare è creare una funzione javascript comune e usare un piccolo RegEx per filtrare il JSON.

function CleanJSONQuotesOnKeys(json) { 
    return json.replace(/"(\w+)"\s*:/g, '$1:'); 
} 
Problemi correlati