gpt4 book ai didi

json - 如何在 JsonBuilder 中使用 map ?即如何在 grails 中创建动态的,而不是静态的 Json?

转载 作者:行者123 更新时间:2023-12-02 15:00:10 27 4
gpt4 key购买 nike

创建硬编码的 json 很容易,例如

String createJson(Person person, list<Account> accounts) {
def builder = new JsonBuilder()
def json = builder {
person person
accounts accounts
}
return builder.toPrettyString()
}

上面的工作,并产生这样的东西:
{
"person":{
username": "user"
"firstName": "test"
}
"accounts":[
{
"balance": "200829.00",
"currency": "CRD",
"id": 1,
}
]
}

问题是我们有一个 REST api,它返回 JSON。目前,我们有很多重复的代码,因为我们找不到通用的方法来生成 JSON api 响应的不同部分并将它们组合在一起并呈现结果,以太通过合并 json 字符串,或者通过动态构建来自 map ,例如以下不起作用:
String createJson(Map map) {
def builder = new JsonBuilder()
def root = builder {
map.collect { key, value ->
"$key" value
}
}
return builder.toPrettyString()
}

然后这样称呼它:
Person person = someMethodToGetAPerson()
List<Account> accounts = someMethodToGetAccounts(person)
Map map = ["person", person, "accounts", accounts]
String json = createJson(map)
render(status: 200, contentType: 'application/json', text: json)

然而,这失败了,在 grails 的内部出现了堆栈溢出。

此外,我们定义了几个必须使用的 json 编码器,例如
JSON.registerObjectMarshaller(Account) {
return [balance: formatter.format(it.balance)....
}

有任何想法吗?

最佳答案

我能理解的是您想将 map 转换为 JSON 字符串。为此,您可以使用 grails.converters.JSON类(class)。例如

    Person person = someMethodToGetAPerson()
List<Account> accounts = someMethodToGetAccounts(person)
Map map = [person: person, accounts: accounts]

String json = new JSON(map).toString()
toString()方法也需要 boolean精美打印的值(value)。它应该尊重您的注册编码员

关于json - 如何在 JsonBuilder 中使用 map ?即如何在 grails 中创建动态的,而不是静态的 Json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32883563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com