首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cfoutput的末尾添加逗号,同时将此cfoutput分组。

在cfoutput的末尾添加逗号,同时将此cfoutput分组。
EN

Stack Overflow用户
提问于 2013-11-12 15:13:40
回答 2查看 139关注 0票数 2

我有一个查询,其中包含包含多个产品的类别。我还根据查询和输出中的类别和产品对其进行了分组。然而,在构造API代码时,我遇到了它们之间的逗号问题。到目前为止,我已经把逗号到处,在结尾,以及,但我不想把它们添加到类别或产品组的末尾。以下是查询:

代码语言:javascript
复制
    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

和我的输出:

代码语言:javascript
复制
{"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>
    ]}

你可以看看这里的现场输出。正如您所看到的,逗号甚至在分组产品的末尾,以及在类别组的末尾添加逗号,但我不希望它们出现在那里。我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 18:34:32

不要滚动您自己的JSON。有许多现有的选项将完成更彻底的工作,并正确地处理嵌入在值中的特殊字符(您的当前代码没有)。只需创建必要的CF结构并使用serializeJSON即可。当然,CF实现有一些特殊之处,所以您也可以考虑使用其中一个基于github.com的JSON项目。不管怎样,这总比自己做好。

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

代码语言:javascript
复制
    { 
       "data":[   <--- array --->
                 {"cat":xxx,  "products":[ <!--- array of products --->], ... }
                , {"cat":yyy, "products":[ <!--- array of products --->], .. }
              ]
    } 

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

代码语言:javascript
复制
<cfset dataArray = []>

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

代码语言:javascript
复制
<cfoutput query="get_json" group="product_catid">
    <!--- create new category structure --->
    <cfset category = {}>
    <cfset category["cat"]= product_cat>
    .... other keys ....
    <cfset category["products"] = []> 
    ...

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

代码语言:javascript
复制
<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中。

代码语言:javascript
复制
     <!--- save to data array --->
     <cfset arrayAppend(dataArray, category)>

  </cfoutput>

最后,结束状态和数据,并序列化它:

代码语言:javascript
复制
  <cfset result = {}>
  <cfset result["status"] = "ok">
  <cfset result["count"] = row>
  <cfset result["data"] = dataArray>

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

Stack Overflow用户

发布于 2013-11-12 15:40:48

考虑一种在数组开头跳过逗号的策略。

代码语言:javascript
复制
{"status":"ok","count":<cfoutput>#row#</cfoutput>,"data":[
<cfoutput query="get_json" group="product_catid">
    {"cat":#product_cat#,"cat_id":#product_catid#,"products":[
       <cfif currentrow GT 1>,</cfif>
       <cfset innercomma = 0>
       <cfoutput group="product_id">
         <cfif innercomma EQ 1>,</cfif>
         <cfset innercomma = 1>
 {"id":#product_id#,"name":#product_name#,"price":#tlformat(price,2)#,"currency":#money#}
       </cfoutput>
    ]}
</cfoutput>
]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19932835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档