2012-06-06 18 views
7

que tienen que decodificar JSON con Extjs 4:Extjs cómo decodificar una cadena json?

he utilizado Ext.decode(string, true), pero no funciona porque mi cadena es un JSON con una cadena JSON (escape) en el interior ... como esto:

var string = '{ 
    success: true, 
    rows: [{ 
     "id": 33, 
     "defaultset": 1, 
     "name": "Generico", 
     "jsonfields": "[{\"name\":\"cm:addressees\",\"title\":\"Destinatari\",\"description\":\"Destinatari\",\"dataType\":\"d:text\",\"url\":\"\/api\/property\/cm_addressees\"}]", 
     "eliminato": 0 
    }] 
}'; 

como se puede ver en el campo jsonfields es una cadena JSON. Cuando uso

Ext.decode(string, true); 

no pasa nada ni error.

¿Alguna sugerencia?

+0

¿Eval (string) funciona? – Johni

+1

no, no ... –

Respuesta

10

Usted puede tratar de esta manera:

var string = '{success:true, rows:[{"id":33,"defaultset":1,"name":"Generico","jsonfields":"[{\\"name\\":\\"cm:addressees\\",\\"title\\":\\"Destinatari\\",\\"description\\":\\"Destinatari\\",\\"dataType\\":\\"d:text\\",\\"url\\":\\"/api/property/cm_addressees\\"}]","eliminato":0}]}'; 

var decodedString = Ext.decode(string); 
console.log(decodedString); 

que es un poco complicado. Si elimina el parámetro seguro, verá que su json pierde \ en su jsonfields porque su cadena está en ' cotizaciones y \ hace el trabajo, pero quiere algo diferente ... por lo que debe duplicarla.

fiddle example

+0

Lo siento, tengo una variable de cadena x, cuando escribo console.log (x) -> obtengo esto: "{success: true, rows: [{" id ": 33, "defaultset": 1, "nombre": "Generico", "jsonfields": "[{\\" nombre \\ ": \\" cm: destinatarios \\ ", \\" título \\ ": \\" Destinatari \\ ", \\" description \\ ": \\" Destinatari \\ ", \\" dataType \\ ": \\" d: text \\ ", \\" url \\ ": \\"/api/property/cm_addressees \\ "}]", "eliminato": 0}]} ", con comillas dobles ... Ext.Decode no funciona ... ¿alguna sugerencia? –

1

Trabaja, por ejemplo, me estoy haciendo mi JSON desde el servidor,

websocket.onmessage = function(event) 

del WebSocket realidad y más tarde cuando quiero descifrar mi JSON,

var json = Ext.decode(event.data); 

y donde necesito mi cadena por ejemplo

json.map.MessageType 

Mi JSON se ve así:

mpty":false,"map":{"MessageText":"Ciao, how are you?","MessageType":"IN"},"hashtable":{"MessageText":"Ciao, how are you?","MessageType":"IN"},"persistData":{"MessageText":"Ciao, how are you?","MessageType":"IN"}} 

Espero que esto ayude, saludos!

Cuestiones relacionadas