Javascript-JSON字符串化原始字符串(无其他转义)

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

我有一个xml文件,需要读取其内容并将其转换为json文件。xml文件的内容应按原样复制并放入json文件中。 如果xml文件包含字符串,例如
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”