我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有
//访问数据库,返回用户对象列表,顺序
ArrayList用户= MySQLDatabaseManager.selectUsers();
//构造响应
JSONObject jsonResponse =新的JSONObject();
int键= 0;
对于(用户用户:用户){
log(“检索用户” + user.toString());
JSONObject jsonObj =新的JSONObject();
jsonObj.put(“ name”,user.getName());
jsonObj.put(“ time”,user.getTime());
jsonResponse.put(key,jsonObj);
键++;
}
//写出
out.print(jsonResponse);
从日志中,我可以看到数据库以正确的顺序返回了User对象。
在前端,我有
成功:函数(jsonObj){
var json = JSON.parse(jsonObj);
var id = 0;
$ .each(json,function(i,item){
var time = item.time;
var name = item.name;
id ++;
$(“ table#usertable tr:last”)。after('<tr> <td>'+ id +'</ td> <td width =“ 20%”>'+时间+
'</ td> <td>'+名称+
'</ td> </ tr>');
});
},
但是顺序改变了。
我只在返回的列表很大(超过130个用户)时才注意到这一点。
我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。
我做错了什么吗?
编辑:示例
{“ 0”:{“ time”:“ 2011-07-18 18:14:28”,“ email”:“ xxx@gmail.com”,“ origin”:“ origin-xxx”,“ source”:“ xxx“,” target“:” xxx“,” url“:” xxx“},
“ 1”:{“ time”:“ 2011-07-18 18:29:16”,“ email”:“ xxx@gmail.com”,“ origin”:“ xxx”,“ source”:“ xxx”, “ target”:“ xxx”,“ url”:“ xxx”},
“ 2”:
,...,
“ 143”:{“时间”:“ 2011-08-09 09:57:27”,“电子邮件”:“ xxx@gmail.com”,“来源”:“ xxx”,“来源”:“ xxx”, “ target”:“ xxx”,“ url”:“ xxx”}
,...,
“ 134”:{“ time”:“ 2011-08-05 06:02:57”,“ email”:“ xxx@gmail.com”,“ origin”:“ xxx”,“ source”:“ xxx”, “ target”:“ xxx”,“ url”:“ xxx”}}
由于JSON对象本身并不具有顺序,因此您应在JSON对象中使用一个数组以确保顺序。例如(基于您的代码):
jsonObj =
{ items:
[ { name: "Stack", time: "..." },
{ name: "Overflow", time: "..." },
{ name: "Rocks", time: "..." },
... ] };
这种结构将确保按正确的顺序插入对象。
根据上面的JSON,您可以将对象放入数组中,然后对数组进行排序。
var myArray = [];
var resultArray;
for (var j in jsonObj) {
myArray.push(j);
}
myArray = $.sort(myArray, function(a, b) { return parseInt(a) > parseInt(b); });
for (var i = 0; i < myArray.length; i++) {
resultArray.push(jsonObj[myArray[i]]);
}
//resultArray is now the elements in your jsonObj, properly sorted;
但这也许比您想要的要复杂。
我是Flink的新手,我试图理解Flink是如何在其的并行抽象中命令调用。考虑这个产生部分和的流的例子: 我希望它的输出是流:。事实上,就在这里。 是否可以安全地假设这种情况始终存在,尤其是在从具有大量并行性的源读取数据时?
问题内容: 下面是Stuff类型的结构。它具有三个整数。A ,它和它的。让我们假设计算给定int列表的double和power是昂贵的计算。 的结果应与初始化内容相同,例如: 我知道我可以使用并从通道中收集值,但是我不知道什么双/次方属于什么数字。 问题答案: Goroutines独立地并行运行,因此,如果没有显式同步,您将无法预测执行和完成顺序。因此,您无法将返回的数字与输入的数字配对。 您可以
问题内容: 在Java中,是否有一个对象的作用类似于用于存储和访问键/值对的Map,但是可以返回键的有序列表和值的有序列表,从而使键和值列表的顺序相同? 因此,按照代码进行解释,我正在寻找某种行为,就像我的虚拟OrderedMap: 问题答案: 该SortedMap的接口(与实施TreeMap的)应该是你的朋友。 该接口具有以下方法: keySet() 它以升序返回一组键 values() 它以对
问题内容: 我有一个Vehicles的PriorityQueue,其中有一个项目未正确订购。我认为我的compareTo中有些东西很奇怪,但是我找不到它。 我有一个主类,它创建PriorityQueue,创建一堆Vehicle对象,然后将它们添加到队列中。 我期望这个输出: 但是我得到了这个: 问题答案: 您的队列和方法可能正常工作。请注意API关于它的说明: 此类及其迭代器实现Collectio
问题内容: 是否可以对第一个查询进行排序并保留返回的行作为第一行,而不对第二个查询进行排序。(如果有道理) 我当前查询的一个示例是: 我希望“苹果”类别下的设备将按照该列表的顺序进行组织,并位于其他设备上方的列表顶部。但这似乎使两个查询混杂在一起。 问题答案: 您需要引入一个人工排序键。就像是:
订购可以看作是一个丰富的比较器,具有增强的链接功能,多种实用方法,多种类型的排序功能等。 Class 声明 (Class Declaration) 以下是com.google.common.collect.Ordering《T》类的声明 - @GwtCompatible public abstract class Ordering<T> extends Object implem