2

REST呼び出しを行うgrailsアプリがあります。エラーが発生した場合、エラーメッセージを含むJSON配列が返されます。これらの文字列を1つの文字列に結合する必要があります。ただし、そうすると、文字列の先頭と末尾に二重引用符が追加されます。問題を説明するために、簡単なテストコントローラーを作成しました。

import net.sf.json.*
class MyController {

    def test = {

        String msg = "'fred' is not a valid LDAP distinguished name."
        JSONArray messages = new JSONArray()
        messages.add(msg)
        def renderStr = messages.join('<br/>')

        render(renderStr)
    }
}

出力は次のようになります。

"'fred' is not a valid LDAP distinguished name."
4

2 に答える 2

3

問題は、join関数がJSON仕様の文字列を返すことです...ここのドキュメントによると:http://grails.org/doc/1.0.3/api/org/codehaus/groovy/grails/web/json /JSONArray.html

 The texts produced by the toString methods strictly conform to JSON syntax rules. The constructors are more forgiving in the texts they will accept:

    An extra , (comma) may appear just before the closing bracket.
    The null value will be inserted when there is , (comma) elision.
    Strings may be quoted with ' (single quote).
    Strings do not need to be quoted at all if they do not begin with a quote or single quote, and if they do not contain leading or trailing spaces, and if they do not contain any of these characters: { } [ ] / \ : , = ; # and if they do not look like numbers and if they are not the reserved words true, false, or null.
    Values can be separated by ; (semicolon) as well as by , (comma).
    Numbers may have the 0- (octal) or 0x- (hex) prefix.
    Comments written in the slashshlash, slashstar, and hash conventions will be ignored.

「文字列が引用符または一重引用符で始まらない場合は、文字列を引用符で囲む必要はありません」というルールが発生していることに注意してください。文字列は引用符で始まるため、引用符なしで出力された場合、JSONパーサーは文字列が2番目の単一引用符で終了したと見なし、その後のテキストは解析できないガベージになります。

于 2012-09-15T05:03:58.507 に答える
0

この便利な方法を使用してください

private String joinJSONArray(arr, delim = ',') {
    def result = ''

    arr.eachWithIndex { e, i ->
        result += e

        if (i != arr.size() - 1) {
            result += delim
        }
    }

    result
}

eachWithIndexGroovyはを提供しないため、これを利用しinjectWithIndexます。

于 2014-11-05T11:00:55.553 に答える