Escape String в Grails, чтобы избежать ошибки JSON

У меня есть несколько строк, как

"12.10 On-Going Submission of ""Made Up"" Samples."

10. PRODUCT STANDARDS; APPROVAL.

который я отображаю как JSON в Grails. Кавычки и любые другие возможные специальные символы доставляют мне проблемы, т.е. они делают JSON недействительным при возврате ответа от службы REST. Как мне это решить? Я пробовал несколько вещей, но ничего не работает:

//text: java.net.URLEncoder.encode(artifact.text, "UTF-8"), //Loses the original format
//text : artifact.text.encodeAsJavaScript(), // give problem with ;
//text: artifact.text.encodeAsHTML(),       // gives &qoute(not wanted) in the text instead of "
//text: StringEscapeUtils.escapeJava((String)artifact.text), //some error
// text : artifact.text   // the json gets cut at the string

У меня есть аналогичный вопрос здесь, чтобы дать вам представление о с чем именно я сталкиваюсь Фрагмент кода:

def index() {

    def document
    def artifacts
    def documentId
    def documentName
    def artifactType
    def artifactStatus
    def includeClassifications
    def classifications
    def mapOfAtifactTypes = [:]
    def listOfArtifacts = []
    def listOfClassifications = []
    def rtnVal = [:]

    documentId = params.documentId
    documentName = params.documentName

    try {

        if (! rtnVal?.msg ) {
            //if we dont' have a message yet it means we don't yet have a failure so we can continue

            if (document){
                rtnVal.documentName = document.docName
                if (artifactType) {
                    artifacts = Artifact.findAllByDocumentAndArtifactType(document, artifactType)
                }
                else {
                    artifacts = Artifact.findAllByDocument(document)
                }
            } else {
                artifacts = Artifact.list();
            }

            if (artifacts) {   
                    def artifactToAdd = [
                            documentId: artifact.documentId,
                            documentName: artifact.document.docName,
                            artifactId: artifact.id,
                            //URLEncode so slashes and other control characters don't cause the rendered JSON to truncate
                            //TODO look up the proper way to encode text prior to JSON rendering
                            //text: java.net.URLEncoder.encode(artifact.text, "UTF-8"),
                            //text : artifact.text.encodeAsJavaScript(),
                            //text: artifact.text.encodeAsHTML(),           
                            //text: StringEscapeUtils.escapeJava((String)artifact.text),    
                            text: artifact.text.replace("\"","\\\""),           
                            status: artifact.status ?: Artifact.ArtifactStatus.FOR_REVIEW.value,
                            hasClassification: listOfClassifications ? true : false
                    ];

                    listOfArtifacts.add(artifactToAdd)
                    }
                rtnVal.listOfArtifacts = []
                mapOfAtifactTypes.each { entry ->
                    rtnVal.listOfArtifacts.add([
                            type: entry.key,
                            artifacts: entry.value
                            ])
                }


        }

    } catch (Exception e) {
        e.printStackTrace()
        rtnVal = [
                status: "Bad request",
                msg: e
        ]
        render e
    }

    render rtnVal as JSON
}

person krs8785    schedule 25.09.2014    source источник
comment
Вы внутри контроллера? Если да, то в чем проблема с render yourObject as JSON? Он должен правильно экранировать строки.   -  person Javier92    schedule 25.09.2014
comment
это так, но строка преобразуется в % 2212.10 + On-Going + Submission + of + % 22% 22Made + Up% 22% 22 + Samples.% 22 Reviewed :   -  person krs8785    schedule 25.09.2014
comment
@ Javier92 json не завершен, он останавливается на тексте: \ 12.10 Текущая отправка \\, если он не закодирован   -  person krs8785    schedule 25.09.2014
comment
Ммм, я никогда не сталкивался с такой проблемой. А как насчет простого конвертера Groovy? new JsonObject(yourObject).toPrettyString() ?   -  person Javier92    schedule 25.09.2014
comment
Я не использую библиотеку Gson. Никогда не использовал ее раньше   -  person krs8785    schedule 25.09.2014
comment
Я немного запутался. Не могли бы вы показать нам хотя бы какой-нибудь фрагмент кода вашего объекта, как вы создаете его экземпляр (со строками, которые вызывают у вас проблемы), где вы конвертируете его в JSON и где вы возвращаете его клиенту?   -  person Javier92    schedule 25.09.2014