在coldfusion中有json_encode(PHP)的替代品吗?

在coldfusion中有json_encode(PHP)的替代品吗?,php,json,coldfusion,Php,Json,Coldfusion,我使用ColdFusionSerializeJSON(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这种

我使用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\u encode($rows)
返回的:

在ColdFusion中是否有
json_encode(PHP)
的替代品?或者我必须手动创建这个json格式吗


谢谢

不,CFML中没有函数以PHP决定用于表示其内部数据类型之一的JSON序列化的格式创建JSON数据包,正如PHP中没有函数以Adobe任意决定的格式创建JSON,将其内部数据类型之一表示为JSON一样

你得自己滚

JSON
JSON\u encode()
吐出来的东西有点乱。用数字索引和字符串键将键/值加倍是怎么回事?根据你给我们的,我不太清楚第二行是如何表示的。你能给我们几行编码为JSON的相当通用的数据,让我们看看PHP在做什么吗

我确信这只是一个循环您的CFML记录集的问题,然后为每一行的列值填充数字/字符串键控属性。不要试图手工构建JSON,在正确的模式中构建本机CFML结构(或结构数组?),然后使用
serializeJson()
将其序列化


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

您可以检查我的jQuery插件以解析本机CF查询返回。您可以对CFC进行本机远程调用,在ColdFusion的本机JSON解析中获取数据(在ajax请求中使用returnFormat:“JSON”选项),然后通过该插件传递结果,以获得您在许多其他jQuery(和其他)插件中所期望的标准名称/值格式。我也有一个类似的ExtJS数据存储解析器

如果您有CF11:

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

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

<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>

从rsosa.colaboradores中选择*

只有在您首先选择的情况下,才能获得以下结果。
{"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>
[{"name":"ABC","id":1},{"name":"Imperial","id":2}] 
 <cfcomponent>
    <cfprocessingDirective pageencoding="utf-8">
    <cfset this.name = "Curso">
    <cfset this.serialization.preservecaseforstructkey = true   >
    <cfset this.serialization.serializeQueryAs = "struct">
    </cfcomponent>
<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>