我有一个我需要使用jQuery搜索的邮政编码列表。
我的CSV文件中的邮政编码如下:
2407;ELVERUM 2425;TRYSIL 2427;TRYSIL 2446;ENGERDAL 2448;ENGERDAL
列表相当大,超过4000个条目,邮政编码和相应的城市。
在浏览器中搜索列表的最快方法是什么? JSON?如果是这种情况,如何更好地将列表转换为JSON或其他格式?
{ "2407": "ELVERUM", "2425": "TRYSIL" }
有人能告诉我最好的方法吗?
更新的
使用正则表达式搜索加载的CSV文件是否可能/更快?
UPDATE2 的 我正在寻找一个完全匹配,它只会在有4个数字的情况下进行搜索。
UPDATE3 的 这是我的代码:
$('#postnummer').keyup(function(e) {
if($(this).val().length == 4) {
// Code to search the JSON for an exact match.
}
});
$.getJSON("data.json",function(data){
});
有人能告诉我使用此代码吗?
答案 0 :(得分:2)
在4,000个条目中,您应该使用您建议的表单将其解析为JSON:
{
"2407": "ELVERUM",
"2425": "TRYSIL"
}
如果您打算通过查找邮政编码的完全匹配进行搜索,这也将为您提供最快的搜索时间。如果你做的事情是用户键入“24”并且你需要找到所有以“24”开头的邮政编码,那么你需要更高级的东西。
我不确定jQuery为解析JSON提供了什么机制。通常的方式是使用eval:
var zips = eval("(" + data + ")");
或者在现代浏览器上,您可以使用更快,更安全的JSON库。
var zips = JSON.parse(data);
答案 1 :(得分:2)
这是一个将您的CSV从URL转换为JSON的网页。您可以在计算机上本地使用它。使用JQuery以及CSV和JSON插件。 注意:此脚本是特定于CSV的快速入侵。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script src="http://js-tables.googlecode.com/svn/trunk/jquery.csv.min.js"></script>
<script src="http://jquery-json.googlecode.com/files/jquery.json-1.3.min.js"></script>
<script>
jQuery(function($){
$('#conv').click(function(){
$.get($('#myurl').val(), function(data){
var csvobj = {};
var csvray = $.csv(';')(data);
$(csvray).each(function(){
csvobj[this[0]] = this[1];
});
$('#jsondata').val( "areacodes=" + $.toJSON(csvobj) );
});
});
});
</script>
Url to CSV: <input type="text" id="myurl" value="tilbud5.csv" />
<input type="button" id="conv" value="convert url to json" />
<br/>
<textarea id="jsondata" rows="1000" cols="100"></textarea>
使用JSON数据,这只是一个例子:
$('#postnummer').keyup(function(e) {
if($(this).val().length == 4) {
alert(areacodes[$(this).val()]);
}
});
$.getJSON("data.json?callback=?");
答案 2 :(得分:0)
对于大型数据集,JSON解析会很慢。我建议您使用简单的自定义格式,就像您使用的格式一样:
2407;ELVERUM
2425;TRYSIL
然后你可以解析:
var data = dataContent.split('\n').map(function(line){ return line.split(';'); })
其中数据现在是一个2元素数组的数组:首先是zipcode,第二个是名称。然后搜索,你会做类似的事情:
var foundItems = data.filter(function(p){ return p[0].indexOf(query) != -1; });
它会为您提供一系列匹配项。如果您只对完全匹配感兴趣,使用地图会表现得更好。在这种情况下,您可以代替第一行来构建映射:
var map = {};
dataContent.split('\n').forEach(function(line){
var p = line.split(';');
map[p[0]] = p[1];
});