2014-10-06 127 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