我在解析一些包含引号的 JSON 时遇到了一个奇怪的小问题。我正在使用本机 JSON.stringify 和 JSON.parse 函数来执行此操作。如果我对一个对象进行字符串化,其中一个对象中有引号,它们会像预期的那样被转义。如果我然后将其解析回一个对象,它又可以正常工作。
问题发生在我字符串化,然后将对象打印到页面,然后解析结果字符串的地方。如果我尝试这样做,解析函数会失败,因为 stringify 在每个有问题的引号之前只放了一个斜杠。
我需要实现这一点的原因是我正在开发一个将存储在数据库中的内容作为 JSON 字符串动态加载的应用程序。有时需要将字符串打印到页面上的某个位置,以便 javascript 可以找到它们并根据它们的内容构建页面。我需要某种方法来稳健地将对象传入和传出字符串,如果用户输入错误的字符,这种方法不会失败!
我暂时可以通过在代码中插入额外的斜杠来解决这个问题,但我想知道是否有更好的方法来处理这个问题?
我整理了几个 jsfiddles 来说明我要描述的内容:
http://jsfiddle.net/qwUAJ/(字符串化然后解析回来)
var ob = {};
ob["number1"] = 'Number "1"';
ob["number2"] = 'Number 2';
ob["number3"] = 'Number 3';
var string = JSON.stringify(ob);
var reOb = JSON.parse('{"number1":"Number \"1\"","number2":"Number 2","number3":"Number 3"}');
$('div').html(string);
http://jsfiddle.net/a3gBf/4/(字符串化,然后打印,然后解析回来)
// Make an object
var ob = {};
ob["number1"] = 'Number "1"';
ob["number2"] = 'Number 2';
ob["number3"] = 'Number 3';
// Turn the object into a JSON string
var string = JSON.stringify(ob);
// Printing the string outputs
// {"number1":"Number \"1\"","number2":"Number 2","number3":"Number 3"}
$('.stringified').html(string);
// Attempt to turn the printed string back into an object
var reOb = JSON.parse('{"number1":"Number \"1\"","number2":"Number 2","number3":"Number 3"}');
// This fails due to the single escaped quote marks.
感谢您提前提供任何帮助!