首页 > 解决方案 > 使用 node.js 将简单文本转换为 json

问题描述

今天我想将文本翻译成 json 数据

例子:

1    kokoa#0368's Discord Profile Avatar    kokoa#0000    826
2    Azzky 陈东晓#7475's Discord Profile Avatar    Azzky 陈东晓#0000    703
3    StarKleey 帅哥#6163's Discord Profile Avatar    StarKleey 帅哥#0000    640

到 =>

{
 "kokoa#0000": "826",
 "Azzky 陈东晓#0000": "703",
 "StarKleey 帅哥#0000": "640"
}

目前我有这个:

fs.appendFile(`./Text/mess.txt`, `${body.replace(/s Discord Profile Avatar/g, '').split(/[\n \t ' ']/)}`, function (err) {

所以结果就是这个=>

1,kokoa#0368,,kokoa#0000,826
2,Azzky 陈东晓#7475,,Azzky 陈东晓#0000,703
3,StarKleey 帅哥#6163,,StarKleey 帅哥#0000,640

但我想删除第一个数字,删除重复的数组并在 .json 上创建这个

有人知道我该怎么做吗?如果我需要新的方法来制作这个,这不是问题。

谢谢你。

标签: node.jsarraysjson

解决方案


您可以逐行读取文件并将每一行转换为具有键和值的 2 元素数组。例如,第一行可以转换为:

['kokoa#0000','826']

如您所见0,索引是键,1索引是值。当您将所有行转换为这种数组时,您可以将其缩减为一个对象并将其转换为JSON.

参见示例方法:

function convertLinesToJson(lines) {
    const dpaText = "Discord Profile Avatar";
    const jsonObject = lines
        //only with 'Discord ...' text
        .filter(line => line.includes(dpaText))
        //get what is after 'Discord ...' text and split into 2-elements array
        .map(line => {
            const index = line.indexOf(dpaText) + dpaText.length;
            const keyValue = line.substr(index).trim().split(/[ ]{4}/);
            return keyValue;
        })
        // convert [key, value] array into an object
        .reduce((accumulator, currentValue) => {
            accumulator[currentValue[0]] = currentValue[1];
            return accumulator;
        }, {});

    //convert object to JSON
    return JSON.stringify(jsonObject);
}

用法:

let lines = [
    "1    kokoa#0368's Discord Profile Avatar    kokoa#0000    826",
    "2    Azzky 陈东晓#7475's Discord Profile Avatar    Azzky 陈东晓#0000    703",
    "3    StarKleey 帅哥#6163's Discord Profile Avatar    StarKleey 帅哥#0000    640"
];
const json = convertLinesToJson(lines);
console.log(json);

上面的示例代码打印:

{"kokoa#0000":"826","Azzky 陈东晓#0000":"703","StarKleey 帅哥#0000":"640"}

也可以看看:


推荐阅读