es6將txt資料序列化成json

bluetooth發表於2021-09-09

原資料(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));



作者:楊肆月
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3402/viewspace-2812541/,如需轉載,請註明出處,否則將追究法律責任。

相關文章