2012-06-06 16 views
7

mam do dekodowania JSON z Extjs 4:Extjs jak odszyfrować ciąg json?

Użyłem Ext.decode(string, true), ale to nie działa bo mój ciąg jest JSON z ciągiem JSON (uciekł) wewnątrz ... tak:

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 
    }] 
}'; 

jak widać pole jsonfields jest ciągiem JSON. Gdy używam

nic nie dzieje się ani błędu.

Wszelkie sugestie?

+0

Czy eval (string) działa? – Johni

+1

nie, to nie ... –

Odpowiedz

10

Możesz spróbować tak:

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); 

że to trochę skomplikowane. Jeśli usuniesz bezpieczny parametr, zobaczysz, że twój json tęskni za \ w twoim jsonfields dlatego, że twój ciąg znaków jest w cytatach ', a jeden \ wykonuje zadanie, ale chcesz coś innego ... więc musisz podwoić.

fiddle example

+0

Niestety mam zmienną łańcuchową x, kiedy piszę console.log (x) -> Otrzymuję to: "{sukces: prawda, wiersze: [{" id ": 33, "defaultset": 1, "name": "Generico", "jsonfields": "[{\\" name \\ ": \\" cm: adresres \\ ", \\" title \\ ": \\" Destinatari \\ ", \\" description \\ ": \\" Destinatari \\ ", \\" dataType \\ ": \\" d: text \\ ", \\" url \\ ": \\"/api/property/cm_addressees \\ "}]", "eliminato": 0}]} ", z podwójnym cudzysłowem ... Ext.Decode nie działa ... jakieś sugestie? –

1

To działa, na przykład ja dostaję moje JSON z serwera,

websocket.onmessage = function(event) 

z websocket rzeczywiście i później, kiedy chcę rozszyfrować moje JSON,

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

i gdzie potrzebuję mój ciąg na przykład

json.map.MessageType 

Moje json wygląda następująco:

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"}} 

Nadzieja to pomaga, na zdrowie!