2015-02-04 4 views
0

В моем приложении grails я вызываю стороннее REST api, которое возвращает JSON, в котором у меня может быть HTML-контент в качестве значения свойства. Например, что-то вроде этого:JSON разбор в Grails

{ 
    "presentationData": { 
    "id": "123-45", 
    "placeholders": [ 
    { 
    "transition": "fade", 
    "items": [ 
    { 
     "name": "Text Item", 
     "objectData": "<font face=\\"Palatino Linotype, Book Antiqua, Palatino, serif\\" size=\\"7\\">TEXT TEXT TEXT</font>", 
     "timeDefined": "false" 
    } 
    ] 
    } 
    ] 
} 
} 

Я не могу разобрать этот JSON в Граалей: получение исключения по адресу: "objectData": "<font face=\\"Palatino Linotype, Book Antiqua, Palatino, serif\\" size=\\"7\\">TEXT TEXT TEXT</font>",

из-за \\ символов в значении.

Я попытался ниже код:

JSONElement scriptJson=JSON.parse(resp) 

и даже с JsonSlurper:

JsonSlurper slurper=new JsonSlurper() 
def scriptJson=slurper.parseText(resp) 

Оба терпят неудачу на то же значение.

Я попытался заменить \\ с \ перед разбором, но не мог заставить его работать:

resp=resp.replaceAll(/\\+/,/\/) 

Получение ошибки компиляции, где, как будто я пытаюсь заменить любой другой символ, #, otherthan / его получении заменены:

resp=resp.replaceAll(/\\+/,/#/) 

давая выход как:

<font face=#"Palatino Linotype, Book Antiqua, Palatino, serif#" size=#"7#">TEXT TEXT TEXT</font> 

Поэтому мне нужно решение для любого:

разборе этот недопустимый JSON или заменяющий \\ с \ в заводной.

Я борюсь за это в течение последних двух дней. Пожалуйста, помогите мне.

+0

Try resp = resp.replaceAll (/ \\ + /,/'/) –

+0

@BZ, он заменяется одиночной цитатой'''. Но я хочу, чтобы меня заменили одной обратной косой чертой, '\'. Думаю, я тоже сказал об этом в моем вопросе. – kaluva

ответ

-1

Ok. После нескольких проб и ошибок, наконец, это сработало:

resp.replaceAll(/\\+/,'\\\\') 

, который дает выход как:

<font face=\"Palatino Linotype, Book Antiqua, Palatino, serif\" size=\"7\">TEXT TEXT TEXT</font> 

Теперь оба JSON.parse(resp) и slurper.parseText(resp) работают отлично без каких-либо ошибок.

Я все еще думаю, что может быть лучшее решение, чем это. В любом случае, у меня мало времени, и поэтому я собираюсь с этим решением.