获取到一条 收货地址需要将其解析成 省、市、县、详细地址
通过寻找到开源项目“address-pars”
但是这个项目已经停很旧了,只能手动针对性更新(省市县)源码
原文件前端具体地址文件路径:github.com/akebe/addre…
顺便介绍一下我使用到的该脚本方法:
<script src="./bundle.js"></script>
<script>
var results = AddressParse.parse('福建省福州市福清市石竹街道义明综合楼3F,15000000000,asseek');
console.log(results);
</script>
还有充字数的一些方法
以下是每个方法的参数及其说明,以及相应的例子:
-
parseByProvince:
- 参数:地址字符串(address)
- 说明:一个包含省份信息的完整地址。
- 例子:输入 "江苏省南京市鼓楼区汉中门大街",将返回 { province: "江苏省", city: "南京市", area: "鼓楼区" }。
-
parseByCity:
- 参数:地址字符串(address)
- 说明:一个包含城市信息的完整地址。
- 例子:输入 "北京市朝阳区建国门外大街",将返回 { province: "", city: "北京市", area: "朝阳区" }。
-
parseByArea:
- 参数:代码字符串(code)
- 说明:代表具体地区的代码(如市或区的缩写)。
- 例子:输入 "BJ001"(北京的区代码),将返回 { province: "", city: "", area: "东城区" }。
-
parse_city_by_province:
- 参数:省份代码字符串(provinceCode)和地址字符串(address)
- 说明:一个地址字符串和一个与之对应的省份代码。
- 例子:输入 "BJ001"(北京的区代码)和地址 "北京市朝阳区建国门外大街",将返回 { city: "北京市" }。
-
parse_area_by_city:
- 参数:城市代码字符串(cityCode)和地址字符串(address)
- 说明:一个地址字符串和一个与之对应的城市代码。
- 例子:输入 "BJ12345"(北京的某区域代码)和地址 "北京市朝阳区建国门外大街",将返回 { area: "朝阳区" }。
-
getTargetAreaListByCode:
- 参数:地区代码字符串(code)
- 说明:需要查询的地区代码。
- 例子:输入 "BJ001"(北京的区代码),将返回包含所有与该代码匹配的区域列表,例如 ["东城区", "西城区"]。
再次寻找如何更新全国最新的省市县 开源项目
被我找到了这个开源项目【AreaCity-JsSpider-StatsGov】,超厉害的加入了规则导出数据,我直接
此处就需要使用到该开源项目的自定义导出数据功能了。【Web数据格式在线转换工具】
我就按照大佬给的方法重新编译了一份
function UserFormat(list, mapping) {
/***********************
修改此方法实现自定义格式(剪切本代码到你的编辑器中修改),可参考JsonArrayFormat的实现
参数list:为所有城市平铺列表,[{id,pid,deep,name,pinyin_prefix,pinyin,ext_id,ext_name,child:[]},...]
参数mapping:为id城市映射,0索引的是省级0:{child:[]},其他为id:{id,pid,deep,name,pinyin_prefix,pinyin,ext_id,ext_name,child:[]}
*************************/
/**导出的json key配置**/
var Settings = {
ID: "id",
IDMinLen: 2 // id最少要这么长,取值2,4,6,尽量不要超过2,因为部分城市没有下级,数据中添加了00结尾的ID作为下级,因此恢复6位时就会冲突。如过调整,生成的数据需要自行处理冲突ID
,Childs:"childs"
};
var exec = function(obj, dist) { // 写个函数,递归处理数据
if (!obj.childs.length) {
return;
}
for (var i = 0; i < obj.childs.length; i++) {
var itm = obj.childs[i];
var id = (itm.id + "");
var formattedId = id.length < Settings.IDMinLen ? (id + "000000000000").substr(0, Settings.IDMinLen) : id;
dist[formattedId] = itm.ext_name; // 将ID和名称添加到结果中
exec(itm, dist); // 递归处理子节点
}
};
var data = {};
exec(mapping[0], data); // 从根节点开始处理
// 生成 JSON 字符串,并去掉 ID 的双引号
var code = "{\n\t\"area_list\": {\n";
for (var key in data) {
if (data.hasOwnProperty(key)) {
code += `\t\t${key}: "${data[key]}",\n`;
}
}
code = code.slice(0, -2); // 去掉最后一个逗号和换行符
code += "\n\t}\n}";
var codeLen = new Blob([code], { "type": "text/plain" }).size + 3;
return Result("", code, "area_format_user.json", codeLen + "字节");
}
带出数据分了省市县,但是还要手动加工一下数据原因【因此恢复6位时就会冲突。如过调整,生成的数据需要自行处理冲突ID】
一顿处理后,终于实现了效果:
输入:湖北省武汉市江岸区二七街道32坊1号
输出:
发现这个新功能就整一下。