2014-10-06 5 views
1

У меня есть следующий скрипт Groovy (не приложение Grails), возвращающее JSON-подобный, но это не является строго достоверным JSON.Groovy return 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, но похоже, что мне придется строить структуру JSON вручную, когда Groovy должен поддерживать вывод. Это то, что я возвращаюсь.

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

Как я уже сказал, это JSON-подобный, но не совсем правильный. Я ожидал чего-то вроде:

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

Любые идеи?

+0

Не могли бы вы предоставить контент JSON, который вы получите для тестирования? – Opal

+0

Веб-сервис, который я звоню, возвращает действительный JSON, когда я тестирую его через REST Client. @ Опал, я не уверен, что понимаю ваш вопрос. Я предоставляю JSON. FYI, я использую Groovy v2.3.6 –

+0

Прошу прощения. Я думал, что это только часть того, что вы получаете. См. Мой отредактированный ответ. – Opal

ответ

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()) 
} 

Вы получаете экземпляр Map под json переменной. Вам не нужно превращать его в строку. Вместо этого используйте:

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

Да, это прекрасно работает. Мой случай использования включает возвращение JSON из веб-службы. Я получаю действительный JSON, когда я вызываю веб-сервис из REST Client (который я показываю выше), но внутри моего скрипта он каким-то образом преобразуется. –

+2

В этом проблема. 'JsonOutput.toJson (json)' исправляет проблему (без '.toString()') – cfrick

+0

Забыл удалить:/Thanks @cfrick. – Opal