【问题标题】:coldfusion output to JSON冷融合输出到 JSON
【发布时间】:2018-08-23 04:45:58
【问题描述】:

我有带有 group 属性的 cfoutput 查询,一切都很好,但我想将其转换为嵌套的 JSON 输出,一种 ul > li

但我对如何输出它感到困惑,这是我迄今为止的尝试

<cfset dataArray = ArrayNew(1) />
<cfoutput query="a" group="ID">
    <cfoutput>
        <cfset dataStruct = StructNew() >
        <cfset dataStruct["Name"] = a.name>
        <cfset dataStruct["WebUrl"] = a.WebUrl>
        <cfset dataStruct["ID"] = a.ID>
        <cfset dataStruct["Name"] = a.Name>
        <cfset dataStruct["Program"] = a.Program>
        <cfset ArrayAppend(dataArray,dataStruct) />
    </cfoutput>    
</cfoutput>
<cfdump var="#dataArray#" abort>

这导致我的结果不正确,因为一个 ID 下可以有 10 个程序,

【问题讨论】:

    标签: json coldfusion coldfusion-11 lucee


    【解决方案1】:

    听起来你正在尝试序列化它。

     <cfset JSONString = serializejson(dataArray)>
    
     <cfoutput>#JSONString#</cfoutput>
    

    题外话

    我会为此使用更新的语法。请注意,您在循环时并没有真正输出。 &lt;cfloop&gt; 更合适。

     <cfset dataArray = [] />
     <cfloop query="a" group="ID">
         <cfloop>
             <cfscript> 
             dataStruct = {};
             dataStruct["Name"] = a.name;
             dataStruct["WebUrl"] = a.WebUrl;
             dataStruct["ID"] = a.ID;
             dataStruct["Name"] = a.Name;
             dataStruct["Program"] = a.Program;
             dataArray.append(dataStruct);
             <cfscript> 
         </cfloop>    
     </cfloop>
    
    
    
     <cfset JSONString = serializejson(dataArray)>
    
     <cfoutput>#JSONString#</cfoutput>
    

    【讨论】:

      【解决方案2】:

      我要做的是使dataStruct.Program 成为一个数组并在那里执行内部循环。

      <cfset dataArray = ArrayNew(1) />
      <cfoutput query="a" group="ID">
          <cfset dataStruct = StructNew() >
          <cfset dataStruct["Name"] = a.name>
          <cfset dataStruct["WebUrl"] = a.WebUrl>
          <cfset dataStruct["ID"] = a.ID>
          <cfset dataStruct["Name"] = a.Name>
          <cfset dataStruct["Program"] = []>
          <cfoutput>
              <cfset ArrayAppend(dataStruct["Program"], a.Program)>
          </cfoutput>
          <cfset ArrayAppend(dataArray,dataStruct) />
      <cfoutput>
      <cfdump var="#dataArray#" abort>
      

      然后您只需将其序列化为 JSON。这假设a.Program 是一个字符串或一个数字;如果它比这更复杂,您可能需要另一个结构。

      【讨论】:

      • 我认为我们在这里遗漏了一点,基本上它应该有这样的输出:&lt;cfoutput query = "a" group = "Id" &gt;&lt;ul id="List"&gt;&lt;li&gt;&lt;h3&gt;&lt;cfswitch expression="#Id#"&gt; &lt;cfcase value="1"&gt;Program1&lt;/cfcase&gt;&lt;cfcase value = "2"&gt; Program2 &lt;/cfcase&gt; &lt;cfcase value = "3"&gt; Program3 &lt;/cfcase&gt; &lt;cfcase value = "4"&gt; Program4 &lt;/cfcase&gt; &lt;cfcase value = "5"&gt; Program5 &lt;/cfcase&gt; &lt;cfdefaultcase&gt;&lt;/cfdefaultcase&gt; &lt;/cfswitch&gt; &lt;/h3&gt;&lt;/li&gt; &lt;cfoutput&gt; &lt;li&gt;&lt;a href="/#WebUrl#"&gt;#Program#&lt;/a&gt;&lt;/li&gt; &lt;/cfoutput&gt; &lt;/ul&gt; &lt;/cfoutput&gt;
      • 我们快到了,但很少有例外
      • 我不明白那个结构。 ID与程序有什么关系?您在问题中对它的描述不同,指出每个 id 最多可以有 10 个程序。您上面评论中的代码改为根据 id 列而不是 program 列为每个 id 显示 1 个程序。到那时,该组的用途是什么?
      • Group 是指向这个&lt;cfset dataStruct["ID"] = a.ID&gt; 的 ID:主要标准是用户可以搜索一个 degreeID,我会说是:3,这将获得所有基于结果在 degreeid = 3 上,这将带来所有程序名称,并且这些程序名称需要根据课程的类型进一步分离
      • @JJK,您提出的所有这些事情都应该是原始问题的一部分。我很困惑你为什么还要使用 JSON。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      相关资源
      最近更新 更多