记录一次JSON数据处理(省市区数据)
2024-09-03 07:27:17
最近在实习工作中遇到了一个需要问题:将后台返回的省市区 json 数据格式化以便前端渲染。这个问题真的是缠绕了我好几天,有思路但是思路特别模糊,今天终于解决了。
返回的数据格式如下:
[
{
"children": [
{
"children": [
"东城区",
"西城区",
...
],
"name": "北京市"
}
],
"name": "北京市"
},
{
"children": [
{
"children": [
"西湖区",
"余杭区",
...
],
"name": "杭州市"
}
],
"name": "浙江省"
},...]
我只需要第一级和第二级的 name 数据值,可以使用递归函数来查找,具体看下面的代码:
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.js"></script>
<script>
// 使用ajax获取数据
function dataFormatterTypeId() {
let json
$.ajax({
url:"administrative-divisions.json",
type:"get",
dataType:"json",
async: false,
success:function(result){
// console.log(result)
json = result
}
})
return json
}
let res = dataFormatterTypeId()
// console.log(res)
// 核心代码----------------递归实现
function getJson (json) {
for (let i = 0; i < json.length; i++) {
if (json[i].children && typeof json[i].children[0] === "object") {
this.getJson(json[i].children)
} else {
json[i].children = undefined
}
}
return json
}
console.log(this.getJson(res))
这里主要的思路是用递归函数实现:使用递归函数设置最后一级 children 的值为undefined 然后返回数据即可。
然而,主要的问题是 终止递归的时机在哪里?我也知道可以通过判断 children 里面的数据部位 Object 类型的时候就可以终止递归,但是,我把最关键的代码写成了 typeof json[i].children[0] === Object
,...
好吧,最基础的知识点:typeof
的取值有 "number"、"string"、"boolean"、"object"、"function" 和 "undefined",注意是字符串。
而今天可能脑子比较清醒,突然想到使用typeof打印以下结果是啥,结果就解决了。
此外,在本地测试,通过jquery ajax 模拟获取数据并返回给全局使用,就是dataFormatterTypeId()函数所作的事情。
最新文章
- Win10 UWP系列:关于错误 0x80073CF9及一个小bug的解决
- [转]Oracle数据块体系的详细介绍
- 《Java程序设计》第二周学习总结
- [About me] 关于Alima博主
- 【转】unity3d input输入
- mybatis3-generator-plugin插件地址
- 区分width()、css(&#39;width&#39;)、innerWidth()
- Ajax 获取数据代码
- Java调用本地接口
- mysql 多列索引的生效规则
- centos/linux下的安装Tomcat
- django-crontab实现定时任务
- VS2010与Matlab2010b混合编程
- css3 - 纯css实现一个轮播图
- 自学工业控制网络之路1.1-工业控制系统发展历程CCS DCS FCS
- pycharm 配置使用
- CompletableFuture 专题
- 编程使用缓冲流读取试题文件,test6_5.txt 内容如下所示。 每次显示试题文件中的一道题目,读取到字符“*”时暂停读取, 等待用户从键盘输入答案。用户做完全部题目后,程序给出用户的得分。
- Ubuntu 14.04环境变量修改
- 关于MySQL数据库