2012-06-06 5 views
7

я должен декодировать JSON с Extjs 4:Extjs как декодировать строку json?

Я использовал Ext.decode(string, true), но это не работает «, потому что моя строка является JSON со строкой JSON (бежал) внутри ... как это:

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

как вы можете видеть поле jsonfields - строка JSON. Когда я использую

Ext.decode(string, true); 

ничего не происходит ни с ошибкой.

Любые предложения?

+0

Работает ли eval (string)? – Johni

+1

нет, это не так ... –

ответ

10

Вы можете попробовать так:

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

, что это немного сложнее. Если вы удалите безопасный параметр, вы увидите, что ваш json пропускает \ в вашем jsonfields, потому что ваша строка находится в ' котировках, а одна \ выполняет эту работу, но вы хотите что-то другое ... так что вам нужно удвоить ее.

fiddle example

+0

Извините, у меня есть строковая переменная x, когда я пишу console.log (x) -> Я получаю это: "{success: true, rows: [{" id ": 33, "defaultset": 1, "название": "Дженерико", "jsonfields": "[{\\" \\ имени ": \\" см: адресаты \\ "\\ "название \\" \\" Destinatari \\ "\\ "описание \\" \\ "Destinatari \\", \\ "DATATYPE \\" \\ "d: \\ текст" \\ "URL \\" \\"/api/property/cm_addressees \\ "}]", "eliminato": 0}]} ", с двойной цитатой ... Ext.Decode не работает ... любые подсказки? –

1

Это делает работу, например, я получаю мой JSon с сервера,

websocket.onmessage = function(event) 

из WebSocket на самом деле, а потом, когда я хочу, чтобы расшифровать мой JSON,

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

и где мне нужна моя строка, например

json.map.MessageType 

Моего JSON выглядит следующим образом:

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

Надеется, что это помогает, ура!