gpt4 book ai didi

mysql - 当此 cfoutput 被分组时,在 cfoutput 的末尾添加逗号

转载 作者:行者123 更新时间:2023-11-29 01:41:37 26 4
gpt4 key购买 nike

我有一个查询,其中包含包含多个产品的类别。我也根据查询和输出中的类别和产品对其进行了分组。然而,在构建API代码时,我遇到了它们之间的逗号问题。到目前为止,我到处都放了逗号,最后也放了逗号,但我不想在类别或产品组的末尾添加它们。这是查询:

    SELECT P.PRODUCT_ID,P.PRODUCT_NAME,PC.PRODUCT_CAT,PC.PRODUCT_CATID,PR.PRICE,PR.MONEY,PC.HIERARCHY
FROM PRODUCT_CAT PC
LEFT OUTER JOIN PRODUCT P ON P.PRODUCT_CATID=PC.PRODUCT_CATID
LEFT OUTER JOIN PRICE PR ON P.PRODUCT_ID=PR.PRODUCT_ID
WHERE P.IS_SALES=1 AND P.IS_EXTRANET=1 AND PR.PRICE IS NOT NULL

GROUP BY PC.HIERARCHY,PC.PRODUCT_CAT,P.PRODUCT_ID,P.PRODUCT_NAME,PC.PRODUCT_CATID,PR.PRICE,PR.MONEY
ORDER BY PC.HIERARCHY,P.PRODUCT_NAME

和我的输出:

{"status":"ok","count":<cfoutput>#row#</cfoutput>,"data":[
<cfoutput query="get_json" group="product_catid">
{"cat":#product_cat#,"cat_id":#product_catid#,"products":[
<cfoutput group="product_id">
{"id":#product_id#,"name":#product_name#,"price":#tlformat(price,2)#,"currency":#money#},<!-- i dont want this comma to be added in the end of the products group --->
</cfoutput>
]},<!-- i dont want this comma to be added in the end of the categories group --->
</cfoutput>
]}

你可以看看the live output of it here .如您所见,甚至在分组产品的末尾添加了逗号,在类别组的末尾也添加了逗号,但我不希望它们出现在那里。我该如何解决这个问题?

最佳答案

不要推出自己的 JSON。有很多现有选项可以完成更彻底的工作,并正确处理值中嵌入的特殊字符(您当前的代码没有)。只需创建必要的 CF 结构并使用 serializeJSON .当然,CF 实现有一些怪癖,因此您也可以考虑使用 JSON projects on github.com 之一.无论哪种方式,都比自己做要好。

无论如何,在您的情况下,data 元素只是 [] 结构数组 {}。每个结构代表一个类别,其中包含一个 products 数组。

    { 
"data":[ <--- array --->
{"cat":xxx, "products":[ <!--- array of products --->], ... }
, {"cat":yyy, "products":[ <!--- array of products --->], .. }
]
}

要创建元素,只需在循环之前初始化数据数组:

<cfset dataArray = []>

在外循环中,为每个类别创建一个结构:

<cfoutput query="get_json" group="product_catid">
<!--- create new category structure --->
<cfset category = {}>
<cfset category["cat"]= product_cat>
.... other keys ....
<cfset category["products"] = []>
...

在您的内部循环中,创建产品并将它们添加到您的类别中:

<cfoutput group="product_id">
<!--- create new product element --->
<cfset prod = {}>
<cfset prod ["id"] = product_id>
... other keys ...

<!--- save product to your category --->
<cfset arrayAppend(category.products, product)>
</cfoutput>

然后在关闭循环之前,将类别保存到您的 dataArray

     <!--- save to data array --->
<cfset arrayAppend(dataArray, category)>

</cfoutput>

最后把状态和数据包起来,序列化:

  <cfset result = {}>
<cfset result["status"] = "ok">
<cfset result["count"] = row>
<cfset result["data"] = dataArray>

<!--- debug serialized results --->
<cfdump var="#serializeJSON( result )#">

关于mysql - 当此 cfoutput 被分组时,在 cfoutput 的末尾添加逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932835/

26 4 0