gpt4 book ai didi

json - 使用条件运算符在 Grails 中渲染 'as JSON' 无法正确渲染

转载 作者:行者123 更新时间:2023-12-03 01:21:50 27 4
gpt4 key购买 nike

今天尝试在 Grails 2.0.4 中将对象列表呈现为 JSON 时遇到了这个奇怪的结果...(我知道我会后悔问这个问题,因为就在我眼皮底下的事情...更新 5/26,我的预测是正确的,见下文:-))

这很好用; JSON 在浏览器中正确呈现...

def products = [] //ArrayList of Product objects from service       
def model = (products) ? [products:products] : [products:"No products found"]
render model as JSON

..那么为什么这个没有 model 的缩短版本不起作用?

def products = []       
render ((products) ? [products:products] : [products:"No products found"]) as JSON

上述代码生成的 JSON 作为单行文本输出,因此我怀疑它没有将 作为 JSON 拾取,但它的括号正确,所以这是怎么回事?

['products':[com.test.domain.Product : null, com.test.domain.Product...]

最佳答案

这是渲染的正常行为。当您向 render 提供不带大括号的参数时,例如

将模型渲染为 JSON

它进行了隐式调整,将 content-type 设置为 text/json。但在后一种情况下,您不知不觉地使 render 使用大括号,例如 [在 render 后在第一个大括号上标记,使渲染使用正常的 render() ]

渲染 ((产品) ? [产品:产品] : [产品:"未找到产品"]) 作为 JSON

在上述情况下,您必须将命名参数传递给 render,并提及 contentTypetextmodelstatus 等。因此,为了在浏览器/ View 中将内联控制逻辑呈现为 JSON,您必须执行以下操作:

render(contentType: "application/json", text: [products: (products ?: "No products found")] as JSON)

您还可以使用content-type作为text/json。我更喜欢 application/json

更新
替代最简单的方法:
render([产品: (产品?: "未找到产品")] as JSON)

关于json - 使用条件运算符在 Grails 中渲染 'as JSON' 无法正确渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16754281/

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