如何在javascript中删除json注释? 我认为正则表达式将是一种简洁的方式。
{
"filed": { // comments
"n": 1 /* multi-line ...
comments */
},
"field2": " // comments in string , /* here */ "
}
应该适用于上面的例子。
注意:字符串中的注释应不删除。
更新:我知道评论i json无效,但为了简单起见我想拥有它们然后删除它们,我看到很多工具支持解析有评论的jsons。
更新2 :上面的示例本身就是一个字符串,我没有解释(抱歉),现在看到一些答案,认为它是一个js代码。
更新3 :我再次忘记将关键名称放在双引号中,更新了问题。
答案 0 :(得分:3)
让javascript解析器执行此操作:
a = {
filed: { // comments
n: 1 /* multi-line ...
comments */
},
field2: " // comments in string , /* here */ "
}
a.toSource()
/*
({filed:{n:1}, field2:" // comments in string , /* here */ "})
*/
你可以用一个字符串(根据编辑过的问题)以同样的方式做到:
a = 'a = {\r\n filed: { // comments n: 1 \r\n/* multi-line ... comments */\r\n},\r\n'
+ 'field2: " // comments in string , /* here */ "\r\n}'
eval(a).toSource().toString();
但它似乎与Chrome无关?哦,忘了,它只是FF,抱歉(在Javascript版本3中)。
我在https://gist.github.com/archan937/1961799找到了替代品,因此以下大多数浏览器都可以使用以下内容。
function inspect(object) {
switch (typeof(object)) {
case "undefined":
return "undefined";
case "string":
return "\"" + object.replace(/\n/g, "\\n").replace(/\"/g, "\\\"") + "\"";
case "object":
if (object == null) {
return "null";
}
var a = [];
if (object instanceof Array) {
for (var i in object) {
a.push(inspect(object[i]));
};
return "[" + a.join(", ") + "]";
} else {
for (var key in object) {
if (object.hasOwnProperty(key)) {
a.push(key + ": " + inspect(object[key]));
}
};
return "{" + a.join(", ") + "}";
}
default:
return object.toString();
}
};
a = 'a = {\r\n filed: { // comments n: 1 \r\n/* multi-line ... comments */\r\n},\r\n'
+ 'field2: " // comments in string , /* here */ "\r\n}'
alert(inspect(eval(a)));
答案 1 :(得分:3)
一种简单的方法是运行JSON.stringify
然后JSON.parse
并保持清洁。
答案 2 :(得分:3)
虽然JSON中的注释不是标准做法,但在某些情况下可能很有用。为此,我为nodejs编写了一个小程序包:json-easy-strip
这是主要的源代码:
数据
["["2","0","2","0"]"]
单行解析器
@years = Task
.where(id: params[:id])
.map { |u| u.created_at.year}.to_s.split(//)
结果
{
/*
* Sweet section
*/
"fruit": "Watermelon", // Yes, watermelons is sweet!
"dessert": /* Yummy! */ "Cheesecake",
// And finally
"drink": "Milkshake - /* strawberry */ or // chocolate!" // Mmm...
}
这里是demo
答案 3 :(得分:1)
仅仅是个人观点,如果你想为生产目的保留一个无效的JSON评论,我想由你自己决定,但是将这些东西部署到你的网站,然后填充JavaScript hacks以使其工作并不是看起来不错。我建议您为部署生成一个干净的JSON文件,并将注释的代码保留给自己。最终用户不必看到它,并且他当然也不需要一堆缩进空间来增加传输的数据量。
无论如何,这是删除这些评论的一种方法:
var invalid_json = "{\n\"filed\": { // comments\n\"n\": 1 /* multi-line ...\ncomments */\n},\n\"field2\": \" // comments in string , /* here */ \"\n}";
eval("var x = " + invalid_json);
var x = JSON.stringify(x);
alert(x); // x should be valid JSON of that
另一种方法是将它用作JavaScript而不是JSON,你只需稍微修改一下文件:
// file.js
var data = {
"filed": { // comments
"n": 1 /* multi-line ...
comments */
},
"field2": " // comments in string , /* here */ "
};
在页面中:
<script type="text/javascript" src="file.js"></script>
这应该将对象导入到您的页面,名称为data
。
答案 4 :(得分:1)
如果您需要删除评论,并支持JSON5,请查看库decomment。
它可以用同样简单的方式从JSON5,JavaScript ES6,CSS和HTML中删除注释。
var decomment = require('decomment');
var code = "var t; // comments";
decomment(code); //=> var t;