2012-09-15 102 views
2

我有Grails應用程序,它會進行REST調用。如果發生錯誤,則返回包含錯誤消息的JSON數組。我需要將這些字符串合併爲一個字符串。但是,當我這樣做時,雙引號被添加到字符串的前端和末尾。我寫了一個簡單的測試控制器來說明這個問題:加入JSONArray將雙引號添加到groovy中的字符串

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

回答

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. 

注意,規則「字符串並不需要在所有被引用,如果他們不是b egin與報價或單引號「是發生了什麼事。您的字符串以引號開頭,因此如果輸出不帶引號,則JSON解析器會假定該字符串以第二個單引號結尾,並且之後的文本將是不可解析的垃圾。

0

使用此方法方便

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

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

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

    result 
} 

它利用eachWithIndex比如Groovy沒有按不提供injectWithIndex