2014-10-06 128 views
1

我有以下Groovy腳本(不是Grails應用程序),它返回類似JSON,但它不是嚴格有效的JSON。Groovy返回JSON

String baseURL = 'https://test.com' 
File userFile = new File("./user.json") 
def client = new HTTPBuilder(baseUrl) 
client.headers['Content-Type'] = 'application/json' 
client.request(GET, JSON) { req -> 
    requestContentType = JSON 
    headers.Accept = 'application/json' 
    response.success = { resp, json -> 
     userFile.append json.toString() 
     println JsonOutput.toJson(json.toString()) 
    } 
} 

我想創建一個JSON輸出文件。我嘗試過使用JsonOutput.prettyPrint,並查看了JsonBuilder,但是看起來像Groovy應該支持輸出時我必須手動構建JSON結構。這是我回來的。

{AssetNumber=AssetNumber1, DeviceFriendlyName=FriendlyName1, PhoneNumber=17035551231, SerialNumber=SerialNumber1, Udid=Udid1, [email protected], UserId=userId1, UserName=userName1} 

正如我所說,這是類似JSON的,但並不嚴格有效。我期待的是這樣的:

{"AssetNumber": "AssetNumber1", "DeviceFriendlyName": "FriendlyName1"....} 

任何想法?

+0

您能否提供JSON內容您可以獲得測試嗎? – Opal 2014-10-06 15:08:43

+0

我正在調用的Web服務在通過REST客戶端測試時返回有效的JSON。 @Opal,我不確定我瞭解你的問題。我正在提供JSON。僅供參考,我正在使用Groovy v2.3.6 – 2014-10-06 15:24:29

+0

對不起。我認爲這只是你得到的一部分。看到我編輯的答案。 – Opal 2014-10-06 15:59:13

回答

1

這工作完全正常(常規v 2.3.6):

import groovy.json.* 

def pretty = JsonOutput.prettyPrint(JsonOutput.toJson([1:2])) 

assert pretty == """{ 
    "1": 2 
}""" 

在這個封閉:

response.success = { resp, json -> 
    userFile.append json.toString() 
    println JsonOutput.toJson(json.toString()) 
} 

你下json變量中獲得的Map一個實例。你不需要把它變成一個字符串。相反使用:

userFile.append JsonOutput.toJson(json) 
    println JsonOutput.toJson(json) 
+0

是的,這工作正常。我的用例涉及從Web服務獲取JSON。當我從REST客戶端(我在上面顯示)調用Web服務時收到有效的JSON,但在我的腳本中,它以某種方式進行了轉換。 – 2014-10-06 15:26:28

+2

這就是問題所在。 'JsonOutput.toJson(json)'修復了這個問題(沒有'.toString()') – cfrick 2014-10-06 16:05:16

+0

忘記刪除它:/ Thanks @cfrick。 – Opal 2014-10-06 16:18:28