Javascript 如何通过nodejs将此文本转换为JSON?
如何通过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
---
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```"
}
我一直在想:
,
获取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));
});