Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析JSON但保留字符串\n_Javascript_Json - Fatal编程技术网

Javascript 解析JSON但保留字符串\n

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行和第

我有一个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行和第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
不会替换任何内容。其次,这里用作输入的字符串在双引号之前没有反斜杠,因为它们是由字符串文字符号解释的。我没有真正理解正则表达式,因为我没有花时间学习它。但是这个代码对我有用。