2010-06-01 31 views
9

Estoy usando net.sf.json.JSONObject para crear algunos datos que se enviarán a una aplicación de front-end, y al código con el que estoy interactuando no le gusta la forma en que agrega la cita marca a cada nombre de campo.Quitando comillas en JSONObject

Por ejemplo:

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

produce la cadena { "JSON": "Hola, mundo"}.

Lo que quiero que devuelva es {JSON: "Hello, World"} - sin comillas alrededor de "JSON". ¿Qué tengo que hacer para que eso suceda?

+0

¿Por qué quieres hacer eso? (Tengo curiosidad) – OscarRyz

+0

Porque estoy interactuando con el código existente que le gusta de esa manera. (Acabo de editar la pregunta original para que quede más claro.) –

Respuesta

1

El javadoc dice

Los textos producidos por los métodos toString métodos estrictamente conformes a las normas sysntax JSON .

Si desea cumplir con las reglas de sintaxis JSON, no debería eliminar las comillas.

O si no te importan las reglas, puedes crear tu propio método simple para construir estas cadenas.

Además, reemplace las 2 primeras apariciones de las citas es válido, como @CharlesLeaf dijo.

1

¿Puedo preguntar por qué quieres hacer esto? No va a ahorrar mucho del total de bytes transferidos en la solicitud.

En cualquier caso, yo diría que tiene que escribir algo, una expresión regular u otra cosa, que reemplace /\"([^"]+)\"\:/ a la primera coincidencia $1. No domino Java, así que no puedo ayudar más.

+0

Estoy tratando de cambiar algún código de back-end sin atornillar mucho con el front-end ... y al principio no parece que me gusten las comillas. Así que estoy tratando de darle al front-end lo que quiere. –

+1

Parece un error en el front-end.Pero en cualquier caso, mi expresión regular debería poder ayudarte. Reemplaza '\" ([^ "] +) \" \: 'con' $ 1: 'de la forma que sea que funcione en Java.' $ 1' coincidiría, en tu ejemplo 'JSON'. – CharlesLeaf

+0

Sí lo hará ... Cuando transfiere una tonelada de datos a través de websockets con nodejs, la cantidad de datos que está guardando en las tuberías sin transferir las comillas dobles es inmensa. –

1

El JSON definition describe cada par como una cadena: valor, por lo que no puede esperar que las bibliotecas net.sf contravengan ese contrato en particular. Si le preocupa poder acceder a los valores cuando se devuelven a algún código de JavaScript (si eso es lo que está haciendo), no es necesario.

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

Si OP quiere una cadena, creo que está bien. Pero si OP quiere para crear un objeto desde {"JSON": "Hola mundo"}, puede usar 'jQuery.parseJSON (" una cadena json aquí ");' –

0

Usted puede utilizar el siguiente método para excluir citas del nombre de la propiedad en su JSON:

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

Consulte la java doc:

5

me he encontrado unos pocos aplicaciones/bibliotecas web como amCharts que admiten JSON como entradas JavaScipt, donde lo que solicita es necesario porque JSON verdadero no es compatible.

Lo que puedes hacer es crear una función de JavaScript común y usar un poco RegEx para filtrar el JSON.

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