Javascript-JSON字符串化原始字符串(无其他转义)
我有一个xml文件,需要读取其内容并将其转换为json文件。xml文件的内容应按原样复制并放入json文件中。 如果xml文件包含字符串,例如Javascript-JSON字符串化原始字符串(无其他转义),javascript,json,Javascript,Json,我有一个xml文件,需要读取其内容并将其转换为json文件。xml文件的内容应按原样复制并放入json文件中。 如果xml文件包含字符串,例如foo\nbar,则生成的json文件将包含foo\\nbar,因为反斜杠被转义 我可以迭代输入字符串,用一个\n替换\和n的所有两个字符,但是我必须对\t、\b、\f等执行相同的操作。 有没有一种方法可以防止这种情况发生,而只是将“原始”内容串接起来 我读取和转换xml文件的代码基本上如下所示 const fs=require(“fs”); const
foo\nbar
,则生成的json文件将包含foo\\nbar
,因为反斜杠被转义
我可以迭代输入字符串,用一个\n
替换\
和n
的所有两个字符,但是我必须对\t
、\b
、\f
等执行相同的操作。有没有一种方法可以防止这种情况发生,而只是将“原始”内容串接起来
我读取和转换xml文件的代码基本上如下所示
const fs=require(“fs”);
const util=require(“util”);
const xml2js=require(“xml2js”);
const readFile=util.promisify(fs.readFile);
异步函数main(){
const fileContent=wait readFile(“data/test.xml”);
常量数据字段=(等待xml2js.parseStringPromise(fileContent))[“根”][“数据”];
const result=dataFields.reduce((上一个,当前)=>{
常量键=当前[“$”]键;
常数值=当前值[“”];
上一个[键]=值;
返回上一个;
}, {});
log(JSON.stringify(result,null,2));
}
main();
示例xml文件:
富\n巴
qux\\n qux
实际产量
{
"foo": "foo\\nbar",
"qux": "qux\\\\nquux"
}
虽然我想要的是
{
"foo": "foo\nbar",
"qux": "qux\\nquux"
}
这里的要点是,一切都按预期进行。文本
foo\nbar
的正确转义字符串表示形式实际上是“foo\\nbar”
执行console.log(“foo\\nbar”)
时,控制台会打印foo\nbar
现在,您真正想要的是将输入文本取消换行
因此,本文:
foo\nbar
应成为本文本:
foo
条形码
后者的转义字符串表示形式为“foo\nbar”
这有一个包,我正在reduce
函数中应用它
const fs = require('fs')
const xml2js = require('xml2js')
const unescape = require('unescape-js')
async function main() {
const fileContent = fs.readFileSync('test.xml', 'utf-8')
const xml = await xml2js.parseStringPromise(fileContent)
const result = xml.root.data
.reduce((result, {_, $}) => ({
...result,
[$.key]: unescape(_)
}), {})
console.log(JSON.stringify(result, null, 2))
}
main()
你的代码看起来不错,你在什么环境下运行它?@AndreasPizsa Windows 10,节点v12.13.0当你将输出重定向到一个文件时,该文件包含什么?当你运行代码并在屏幕上打印时,引号是否也被转义?输出是否更像
“{\“foo\”:“foo\\nbar\”,“qux\”:“qux\\\\nkux\”}”
?如果重定向到文件或打印到标准输出,则内容相同。引号不会转义,因为xml文件中没有引号,如果它们存在于xml文件中,则会转义,例如“foo\nbar”