java - escaped - Escape String in Grails para evitar el error JSON
json to json string online (0)
Tengo pocas cuerdas como
"12.10 On-Going Submission of ""Made Up"" Samples."
10. PRODUCT STANDARDS; APPROVAL.
que represento como JSON en griales. Las comillas y cualquier otro posible carácter especial me están dando problemas, es decir, hacen que el JSON sea inválido al devolver una respuesta del servicio REST. ¿Cómo puedo solucionar esto? He intentado algunas cosas pero nada parece funcionar:
//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
Tengo una pregunta similar aquí para darte la idea de qué es exactamente lo que estoy enfrentando. El fragmento de código:
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
}