美文网首页开源工具技巧让前端飞
es6将txt数据序列化成json

es6将txt数据序列化成json

作者: 杨肆月 | 来源:发表于2018-07-31 14:40 被阅读4次

    原数据(txt格式)

    CN1100 PROVINCE 北京市

    CN1101 CITY 北京市-北京市

    CN1300 PROVINCE 河北省

    CN1303 CITY 河北省-秦皇岛市

    CN1309 CITY 河北省-沧州市

    CN1311 CITY 河北省-衡水市

    CN3500 PROVINCE 福建省

    CN3501 CITY 福建省-福州市

    CN3503 CITY 福建省-莆田市

    CN3600 PROVINCE 江西省

    CN3601 CITY 江西省-南昌市

    CN3609 CITY 江西省-宜春市

    CN3611 CITY 江西省-上饶市

    期望的JSON格式

    [

        {

            "code": "CN11",

            "province": "北京市",

            "city": [

                {

                    "code": "01",

                    "name": "北京市"

                }

            ]

        },

        {

            "code": "CN13",

            "province": "河北省",

            "city": [

                {

                    "code": "03",

                    "name": "秦皇岛市"

                },

                {

                    "code": "09",

                    "name": "沧州市"

                },

                {

                    "code": "11",

                    "name": "衡水市"

                }

            ]

        },

        {

            "code": "CN35",

            "province": "福建省",

            "city": [

                {

                    "code": "01",

                    "name": "福州市"

                },

                {

                    "code": "03",

                    "name": "莆田市"

                }

            ]

        },

        {

            "code": "CN36",

            "province": "江西省",

            "city": [

                {

                    "code": "01",

                    "name": "南昌市"

                },

                {

                    "code": "09",

                    "name": "宜春市"

                },

                {

                    "code": "11",

                    "name": "上饶市"

                }

            ]

        }

    ]

    步骤:

    1、观察原TXT文件格式,发现每一行换行了,即使用‘/n’隔开

    2、str=`(txt里的数据)`,let arrStr = str.split('\n');

    console.log(arrStr)后发现,每行里一个小字符串之间由tab隔开,即使用‘/t’隔开

    3、以分割的思维来写代码,多次对字符串运用split

    let arrStr = str.split('\n');

    let zoneList = [];

    arrStr.map(i => {      //调用数组的每个元素i

        let item = i.split('\t');

      //没有'-'分割,即 省 的字段

    // 例如:CN1300 PROVINCE 河北省

        if (i.indexOf("-") == -1) {

            zoneList.push({

                code: item[0].slice(0, 4),

                province: item[2],

                city: []

            })

      } else {

            //例如 福建省-福州市

            let city = item[2].split('-');

            //找到  河北省与河北省-秦皇岛市、河北省-沧州市、河北省-衡水市,-前名字相同的

            //并只返回一条(这个很关键)

            let cur = zoneList.find(j => j.province == city[0])

            cur.city.push({

                code: item[0].slice(4, 6),

                name: city[1]

            })

      }

    })

    //最后输出在控制台上内容太多最好序列化下才看得到

    console.log(JSON.stringify(zoneList));

    相关文章

      网友评论

        本文标题:es6将txt数据序列化成json

        本文链接:https://www.haomeiwen.com/subject/sdchvftx.html