Javascript 解析JSON但保留字符串\n
我有一个JSON字符串:Javascript 解析JSON但保留字符串\n,javascript,json,Javascript,Json,我有一个JSON字符串: {\"text\":\"Line 1\\nLine 2\",\"color\":\"black\"} 我可以在执行此操作时解析它: pg = JSON.parse(myJSONString.replace(/\\/g, "")); 但当我访问pg.text时,值为: Line 1nLine 2. 但我希望值精确到: Line 1\nLine 2 JSON字符串对于将其解释为更大命令的一部分的目标程序来说是有效的。实际上是地雷船。Minecraft将按照第1行和第
{\"text\":\"Line 1\\nLine 2\",\"color\":\"black\"}
我可以在执行此操作时解析它:
pg = JSON.parse(myJSONString.replace(/\\/g, ""));
但当我访问pg.text时,值为:
Line 1nLine 2.
但我希望值精确到:
Line 1\nLine 2
JSON字符串对于将其解释为更大命令的一部分的目标程序来说是有效的。实际上是地雷船。Minecraft将按照第1行和第2行在单独的行中所期望的方式呈现此效果
但我正在制作一个编辑器,它需要按原样读取\n。将显示在html输入字段中
正如这里的一些上下文一样,完整的命令包含一些JSON代码
/summon zombie ~ ~1 ~ {HandItems:[{id:"minecraft:written_book",Count:1b,tag:{title:"",author:"",pages:["{\"text\":\"Line 1\\nLine 2\",\"color\":\"black\"}"]}},{}]}
尝试在/\[1]/g处添加[1],但仅适用于单斜杠,但由于在解析时引用的json类型是字符串,因此斜杠将自动删除,因此您甚至不需要使用replace。和\n将保持不变
var myString ='{\"text\":\"Line 1\\nLine 2\",\"color\":\"black\"}';
console.log(JSON.parse(myString.replace(/\\[1]/g, ""))); //adding [1] will remove single slash \\n -> \n
var myString =JSON.parse(myString.replace(/\\[1]/g, ""));
console.log(myString.text);
您的字符串不是有效的JSON,理想情况下,您应该修复生成它的代码,或者与它的提供者联系 如果问题是总是有一个反斜杠太多,那么您可以这样做:
//需要转义此字符串文字中的反斜杠才能获得实际输入:
var myJSONString='{\\\“text\\”:\\“Line 1\\\\\nLine 2\\”,\\“color\\”:\\“black\\”};
log(myJSONString);
//仅替换前面没有其他反斜杠的反斜杠:
var fixedJSON=myJSONString.replace(/([^\\])\\/g,“$1”);
log(fixedJSON);
var pg=JSON.parse(fixedJSON);
控制台日志(pg)代码>你所说的“当我访问pg.text”是什么意思?如果它位于
值中,则它们不支持多行字符串,并且所有换行符都将被删除。您可能需要一个
为什么在JSON中转义引号?看起来您对它进行了双重编码,所以需要对它进行两次解析。这是完整的命令。此Minecraft NBT格式。但是is在pages数组中包含JSON的一部分:/召唤僵尸~~~1~{HandItems:[{id:“minecraft:Writed\u book”,计数:1b,标记:{title:,author:,pages:[“{\'text\”:\'Line 1\\nLine 2\,\'color\:\'black\'}},{}]@Andy,您没有与OP相同的输入字符串:您的输入字符串没有所有这些反斜杠,因为它们是由字符串文字符号解释的。这个解决方案对我有效,但我在开始时也这样做了:myString=“\”“+jsonString+”\”;这个答案毫无意义:[1]
将要求字符串中出现一个文本1,因此replace
不会替换任何内容。其次,这里用作输入的字符串在双引号之前没有反斜杠,因为它们是由字符串文字符号解释的。我没有真正理解正则表达式,因为我没有花时间学习它。但是这个代码对我有用。