首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >coldfusion中有没有json_encode的替代品?

coldfusion中有没有json_encode的替代品?
EN

Stack Overflow用户
提问于 2013-09-19 22:29:42
回答 4查看 1.2K关注 0票数 2

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

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

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

代码语言:javascript
复制
[ { "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格式?

谢谢

EN

回答 4

Stack Overflow用户

发布于 2013-09-19 22:59:31

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

你就得自己动手了。

JSON json_encode()被吐出来的时候有点乱。同时使用数字索引和字符串键将键/值加倍,这是什么意思?根据您提供给我们的内容,我不太清楚第二行是如何表示的。你能给我们几行用JSON编码的相当通用的数据,让我们看看PHP在做什么吗?

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-09-26 15:09:49

代码语言:javascript
复制
<cfquery name="getQuery" datasource="tags_dsn" dbtype="ODBC" >  
                select field1, field2 from tablename
</cfquery>

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

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

代码语言:javascript
复制
[{"name":"ABC","id":1},{"name":"Imperial","id":2}] 
票数 3
EN

Stack Overflow用户

发布于 2015-03-04 10:11:59

如果您有CF11:

代码语言:javascript
复制
 <cfcomponent>
    <cfprocessingDirective pageencoding="utf-8">
    <cfset this.name = "Curso">
    <cfset this.serialization.preservecaseforstructkey = true   >
    <cfset this.serialization.serializeQueryAs = "struct">
    </cfcomponent>

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

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18897497

复制
相关文章

相似问题

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