【问题标题】:Is there any subsitute of json_encode(PHP) in coldfusion?在coldfusion中有没有json_encode(PHP)的替代品?
【发布时间】:2013-09-19 14:29:41
【问题描述】:

我使用 ColdFusion SerializeJSON(queryname) 将我的查询结果转换为 json 格式,得到如下结果:

{ 
  "COLUMNS":["ID","TAG","TAG_DESCRIPTION","TYPE"]
  , "DATA": [1,"PHP","PHP is an open-source server-side scripting language widely used in web development.","programming"]
}

但我想要 json 这种格式,这是 PHP json_encode($rows) 返回的:

[ { "ID":"1"
    , "0":"1"
    , "tag":"php" 
    , "1":"php","type":"programming"
    , "2":"programming"
    , "tag_description":"PHP is an open-source server-side scripting language widely used in web development."
    , "3":"PHP is an open-source server-side scripting language widely used in web development."
   } 
]

在 ColdFusion 中有没有 json_encode(PHP) 的替代品?还是我必须手动创建这种 json 格式?

谢谢

【问题讨论】:

标签: php json coldfusion


【解决方案1】:

不,CFML 中没有创建 JSON 数据包的函数,PHP 决定使用这种格式来表示其内部数据类型之一的 JSON 序列化,就像 PHP 中没有创建 JSON 格式的函数一样格式 Adob​​e 任意决定将其内部数据类型之一表示为 JSON。

你必须自己动手。

吐出的 JSON json_encode() 有点乱。使用数字索引和字符串键将键/值加倍的故事是什么?根据您在那里给我们的内容,我无法完全确定第二行将如何表示。您能否给我们几行编码为 JSON 的相当通用的数据,以便我们了解 PHP 在做什么?

我确信这只是循环遍历您的 CFML 记录集的问题,然后为每一行的列值填充数字/字符串键控属性。不要尝试手动构建 JSON,在正确的架构中构建原生 CFML 结构(或结构数组?),然后用 serializeJson() 序列化 那个

抱歉有点含糊。如果您可以通过按照选择的方式序列化您的记录来解释 PHP 的想法,我可以更好地解释 CFML 逻辑以达到相同的目的。

【讨论】:

    【解决方案2】:
    <cfquery name="getQuery" datasource="tags_dsn" dbtype="ODBC" >  
                    select field1, field2 from tablename
    </cfquery>
    

    如果我使用的是 SerializeJSON(getQuery),得到下面的 json 格式输出:

    {"COLUMNS":["ID","NAME"],"DATA":[[1,"ABC"],[2,"Imperial"]]}
    
    <!---Instead of using SerializeJSON(getQuery) to Change the getQuery result to json i am using the below way.--->
    
    <cfset var aTmp = arraynew(1)>
    <cfif #getQuery.recordcount# gt 0>
        <cfloop query="getQuery">
            <cfset coInfo = StructNew()>
            <cfset coInfo["id"]="#getQuery.field1#">
            <cfset coInfo["name"]="#getQuery.field2#">
            <cfset arrayAppend(aTmp,coInfo)>
        </cfloop>
    <cfset jsondata =  SerializeJSON(aTmp)>
    <cfoutput>#jsondata#</cfoutput>
    </cfif>
    

    所以输出的json是:

    [{"name":"ABC","id":1},{"name":"Imperial","id":2}] 
    

    【讨论】:

      【解决方案3】:

      如果你有 CF11:

       <cfcomponent>
          <cfprocessingDirective pageencoding="utf-8">
          <cfset this.name = "Curso">
          <cfset this.serialization.preservecaseforstructkey = true   >
          <cfset this.serialization.serializeQueryAs = "struct">
          </cfcomponent>
      

      您将在 cfm/cfc 中使用 serializeJSON(query)。或:

      <cffunction name="estructura" access="remote"  returntype="any" >
      <cfargument name="query" type="query" required="true" >
      
          <cfset columns = arguments.query.ColumnList>
          <cfset array = ArrayNew( 1 )>
              <cfloop query="#arguments.query#">
                  <cfset query_ = structNew()>
                  <cfloop list="#columns#" index="col">
                      <cfset query_[lcase(col)] = arguments.query[col][arguments.query.CurrentRow]>
                  </cfloop>
                  <cfset array[arguments.query.CurrentRow] = query_>
              </cfloop>
      
      <cfset data.data = array>
      
      <cfreturn data>
      
      </cffunction>
      <cffunction name="prueba" access="remote" returntype="any" returnformat="JSON">
      
          <cfquery name="query">
              select * from rsosa.colaboradores
          </cfquery>
      
      
          <cfreturn estructura(query)>
      
      
      </cffunction>
      

      【讨论】:

        【解决方案4】:

        您可以查看我的 jQuery 插件来解析原生 CF 查询返回。您可以对 CFC 进行本地远程调用,在 ColdFusion 的本地 JSON 解析中取回您的数据(在您的 ajax 请求中使用 returnFormat: 'json' 选项),然后通过此插件传递您的结果以获取标准名称/值格式您期待有这么多其他 jQuery(和其他)插件。我也有一个类似的 ExtJS 数据存储解析器。

        https://github.com/cutterbl/serializeCFJSON

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-26
          • 2015-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多