解析JSON但保留字符串

时间:2017-08-25 01:04:22

标签: 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。 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\"}"]}},{}]}

2 个答案:

答案 0 :(得分:0)

尝试在/ \ [1] / g处添加[1]但仅适用于单斜杠,但由于引用的json的类型我认为在解析时它是一个字符串,它会自动删除斜杠,所以你不要甚至需要使用替换。并且\ 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); 

答案 1 :(得分:0)

你的字符串是无效的JSON,理想情况下你应该修改生成它的代码,或者联系它的提供者。

如果问题是总有一个反斜杠太多,那么你可以这样做:

// Need to escape the backslashes in this string literal to get the actual input:
var myJSONString = '{\\"text\\":\\"Line 1\\\\nLine 2\\",\\"color\\":\\"black\\"}';
console.log(myJSONString);

// Only replace backslashes that are not preceded by another:
var fixedJSON = myJSONString.replace(/([^\\])\\/g, "$1");
console.log(fixedJSON);

var pg = JSON.parse(fixedJSON);
console.log(pg);