Javascript 如何通过nodejs将此文本转换为JSON?

Javascript 如何通过nodejs将此文本转换为JSON?,javascript,node.js,json,Javascript,Node.js,Json,如何通过nodejs将此文本转换为JSON 输入: --- title:Hello World tags:java,C#,python --- ## Hello World ```C# Console.WriteLine(""Hello World""); ``` 预期产出: { title:"Hello World", tags:["java","C#","pytho

如何通过nodejs将此文本转换为JSON

输入:

---
title:Hello World
tags:java,C#,python
---
## Hello World
```C#
Console.WriteLine(""Hello World"");
```
预期产出:

{
    title:"Hello World",
    tags:["java","C#","python"],
    content:"## Hello World\n```C#\nConsole.WriteLine(\"Hello World\"");\n```"
}
我一直在想:

  • 使用正则表达式获取key:value数组,如下所示:
  • 然后检查key是否等于tags,然后使用string.split函数按
    获取tags值数组,否则返回值

  • 另一部分是内容价值


  • 但是我不知道如何通过nodejs实现它。

    看起来您正在尝试将markdown转换为JSON。看一看。
    您还可以使用标记解析器(如)从文本中提取标记,您需要进一步分析这些标记。

    在这种特定情况下,如果您的数据是这样精确构造的,您可以尝试以下方法:

    const fs = require("fs");
    fs.readFile("input.txt", "utf8", function (err, data) {
        if (err) {
            return console.log(err);
        }
        const obj = {
            title: "",
            tags: [],
            content: "",
        };
        const content = [];
        data.split("\n").map((line) => {
            if (!line.startsWith("---")) {
                if (line.startsWith("title:")) {
                    obj.title = line.substring(6);
                } else if (line.startsWith("tags")) {
                    obj.tags = line.substring(4).split(",");
                } else {
                    content.push(line);
                }
            }
        });
        obj.content = content.join("\n");
        fs.writeFileSync("output.json", JSON.stringify(obj));
    });
    
    然后将整个
    fs.readFile
    封装在一个循环中,以处理多个输入。
    请注意,您需要将每个输入放在一个单独的文件中,并按照您在问题中提到的方式进行结构设计,这样才能使其正常工作。对于更一般的用法,可能会尝试一些现有的npm软件包,就像其他人建议的那样,这样你就不会重新发明轮子了。

    如果输入是一种已知的格式,那么你应该使用经过战斗测试的库将输入转换为json,特别是如果输入本质上是极端动态的,否则,根据输入的动态程度,您可能可以轻松构建解析器

    假设您发布的输入是静态结构,那么下面的工作应该完成

    函数convertToJson(str){
    常量arr=str.split('--').filter(str=>str!='')
    常量标记和标题=arr[0]
    常量tagsAndTitleArr=tagsAndTitle.split('\n').filter(str=>str!='')
    常量titleWithTitleLabel=TagsandTitleAr[0]
    常量tagsWithTagsLabel=TagsAndTitlear[1]
    const tagsWithoutTagsLabel=tagsWithTagsLabel.slice(tagsWithTagsLabel.indexOf(':')+1)
    常量titleWithoutTitleLabel=titleWithTitleLabel.slice(titleWithTitleLabel.indexOf(':')+1)
    const tags=tagsWithoutTagsLabel.split(',')
    常数结果={
    标题:没有标题标签的标题,
    标签,
    内容:arr[1]。切片(0,arr[1]。长度-1)。切片(1)//去掉第一个新行和最后一个新行
    }
    返回JSON.stringify(结果)
    }
    常数x=`---
    标题:你好,世界
    标签:java、C#、python
    ---
    ##你好,世界
    \`\`\`C#
    Console.WriteLine(“你好世界”);
    \`\`\`
    `
    
    log(convertToJson(x))
    我相信如果内容本身包含title或tags这两个词,这个答案就会失败。除此之外,这是相当有趣的compact@ehab如果内容行以“title”、“tags”或“---”开头,它将失败,否则不会出现问题。但对于这一特定情况,它肯定只是一个不可重用的代码:Dthanks很多,我支持这一点!就像你说的,我想把这种格式的标记转换成json。
    const fs = require("fs");
    fs.readFile("input.txt", "utf8", function (err, data) {
        if (err) {
            return console.log(err);
        }
        const obj = {
            title: "",
            tags: [],
            content: "",
        };
        const content = [];
        data.split("\n").map((line) => {
            if (!line.startsWith("---")) {
                if (line.startsWith("title:")) {
                    obj.title = line.substring(6);
                } else if (line.startsWith("tags")) {
                    obj.tags = line.substring(4).split(",");
                } else {
                    content.push(line);
                }
            }
        });
        obj.content = content.join("\n");
        fs.writeFileSync("output.json", JSON.stringify(obj));
    });