我正在尝试创建一个文本区域,用户可以在其中编辑JSON对象以更改程序配置。当用户尝试保存配置并将textarea的值转换为JSON对象时,将运行此代码。
// Convert the value into a JSON ready string
var rule = JSON.stringify($(this).val());
rule = JSON.parse(rule);
alert(JSON.stringify(rule));
/* The alerted string:
"{\n \"thing1\": \"\",\n \"thing2\": [],\n \"thing3\": [],\n \"thing4\": [],\n \"thing5\": [],\n \"thing6\": false, \n}"
*/
代码完整地完成,没有引发任何错误,但是创建的JSON字符串仍然充满换行符。尝试访问任何键,例如alert(rule.thing6);不返回任何内容,而不是返回false。如何将textarea值转换为有效的JSON对象?我不需要保留换行符。
答案 0 :(得分:0)
实际的字符串不包含换行符(\ n),而是转义的换行符(\ n)。换行符将被呈现为换行符。
要删除这些内容,请像.replace(/\\n/g, '')
这样使用(JSON.stringify(rule)).replace(/\\n/g, '')
此外,您最后还有一个逗号,这使得json无效\"thing6\": false,}"
应该为\"thing6\": false}"
答案 1 :(得分:0)
// Convert the value into a JSON ready string
var rule = JSON.stringify($(this).val());
rule = rule.replace(/\s/g, ""); //add this line
rule = JSON.parse(rule);
alert(JSON.stringify(rule));
此外,您的json对象的最后一个属性后不能包含,(逗号)。
\"thing6\": false,}"
应该是\"thing6\": false}"
。
答案 2 :(得分:0)
JSON.stringify用于将javascript对象转换为JSON字符串。您从textarea获得的值已经是一个(大概是JSON)字符串。
因此,您可以跳过字符串化步骤,只需解析它即可。
// Convert the value into a JSON ready string
var rule = JSON.parse($(this).val());
alert(JSON.stringify(rule))