使用SerializeJSON返回结构数组而不是COLUMNS和DATA节点的JSON对象?

Jor*_*kin 2 coldfusion json railo underscore.js

我正在构建一个Railo应用程序,它处理通过Ajax来回发送的大量JSON数据.我发现了一个优化其性能的机会,但在我解决之前,我想听听社区的一些建议.

这是一个很好的例子.

我在服务器上有一个操作,查询一组出价响应,将它们序列化为JSON,然后将它们返回到前端的javascript,然后解析并呈现一些HTML.Railo返回JSON的格式是熟悉的双节点对象:

{"COLUMNS":["one","two","three",...],"DATA":["value","value","value",...]}
Run Code Online (Sandbox Code Playgroud)

我写了一个函数,利用下划线的map()函数将这种格式转换为具有命名节点的对象数组:

function toArgsObject(data,columns) {
return _.map(data, function(w){
    var q = {};
    for (var i=0; i < w.length; i++) { eval("q."+columns[i]+" = w[i]"); };
    return q;
});
};
Run Code Online (Sandbox Code Playgroud)

这可以很好地完成工作,但性能不是很好!即使使用像webkit和firefox那样的swift js解释器,这个函数通常占调用函数的75%的处理时间,特别是当数据集很大时.我想看看通过将这个处理卸载到服务器可以获得多少改进,但是我没有完全使用cfml/cfscript chops来编写这个的有效版本.

那么,我需要从服务器返回的内容如下所示:

[
{"one":"value","two":"value","three":"value"},
{"one":"value","two":"value","three":"value"}.
...
]
Run Code Online (Sandbox Code Playgroud)

我知道SerializeJSON使用的格式会创建更小的响应,因此使用更少的带宽来发送.这就是实验的用武之地.我想看看它如何影响我的应用程序以不同的方式做事!

有没有人写过JSON Serializer,可以以这种格式返回数据?

Ser*_*gii 6

如果您需要JS中的结构数组,则可以轻松地将查询转换为服务器端的此类数据集并应用SerializeJSON().

快速示例1

<cfset dataset = [
    {"one":"value","two":"value","three":"value"},
    {"one":"value","two":"value","three":"value"}
] />

<cfoutput><p>#SerializeJSON(dataset)#</p></cfoutput>
Run Code Online (Sandbox Code Playgroud)

(我喜欢 Railo中结构定义语法的自由)

快速示例2

<cfquery datasource="xxx" name="qGetRecords">
    select userId, login, email from users limit 0,3
</cfquery>

<cfset dataset = [] />

<cfloop query="qGetRecords">
    <cfset record = {} />
    <cfset record["one"] = qGetRecords.userId />
    <cfset record["two"] = qGetRecords.login />
    <cfset record["three"] = qGetRecords.email />
    <cfset ArrayAppend(dataset, record) />
</cfloop>

<cfoutput>
    <p>#SerializeJSON(qGetRecords)#</p>
    <p>#SerializeJSON(dataset)#</p>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

应该适合你.