我可以在json文件里使用注释吗? 如果是的话,怎么写?
当前回答
您可以通过正则表达式使用简单的预处理。例如,以下函数将在php中解码注释json:
function json_decode_commented ($data, $objectsAsArrays = false, $maxDepth = 512, $opts = 0) {
$data = preg_replace('~
(" (?:[^"\\\\] | \\\\\\\\ | \\\\")*+ ") | \# [^\v]*+ | // [^\v]*+ | /\* .*? \*/
~xs', '$1', $data);
return json_decode($data, $objectsAsArrays, $maxDepth, $opts);
}
它支持所有php- type 注释 : / *, , , / / 。 字符串的字典被保存 。
其他回答
注释不是官方标准,尽管有些分析者支持 c++- 风格的注释。
// Configuration options
{
// Default encoding for text
"encoding" : "UTF-8",
// Plug-ins loaded at start-up
"plug-ins" : [
"python",
"c++",
"ruby"
],
// Tab indent size
"indent" : { "length" : 3, "use_space": true }
}
jsonlint 不验证这一点 。 因此, 批注是解析器特定的扩展名, 而不是标准 。
另一本书是Json5。
取代json Toml的替代品。
另一种选择是jsonc。
Nlohmann/json的最新版本有选择的支持,
如果你用杰克森做你的杰森采摘师 那么这就是你如何让它 允许评论:
ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);
然后,你可以有这样的评论:
{
key: "value" // Comment
}
并且也可以从设置开始有评论:
mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);
但一般而言(如以前回答的)规格不允许提出评论。
是的,你可以有评论。 但我不建议任何上述理由。
我做了一些调查,我发现所有json都要求使用 json.parse 方法的方法。所以我找到了一个解决办法: 我们可以控制或修补猴子绕着json.parse。
注:仅用节点/js 测试;-)
var oldParse = JSON.parse;
JSON.parse = parse;
function parse(json){
json = json.replace(/\/\*.+\*\//, function(comment){
console.log("comment:", comment);
return "";
});
return oldParse(json)
}
json 文件 :
{
"test": 1
/* Hello, babe */
}
json 规格不支持评论, // 或/ * * / 样式。
但一些 Json 剖析图书馆和助手支持它们。
类似 :
json5 视觉演播室 代码评论
json 的作者希望我们把评论写进json里, 但是在解析之前先把评论删掉( 见 Michael Burr 提供的链接 ) 。 如果json 有评论的话, 为什么不将评论标准化, 让 Json 牧师来做工作? 我不同意这里的逻辑, 但是, 可惜, 这就是标准。 使用其他人建议的山药解决方案是好的, 但是它需要图书馆的依赖性 。
如果您想要删除注释, 但不想有图书馆依赖性, 这里是一个双线解决方案, 用于 c++- 风格的注释, 但可以适应其它选项 :
var comments = new RegExp("//.*", 'mg');
data = JSON.parse(fs.readFileSync(sample_file, 'utf8').replace(comments, ''));
请注意,只有在您可以确定json数据不含评论启动器的情况下,例如('/'),才能使用这一解决方案。
实现 json 解析、 解析评论和不增加图书馆的另一种方法, 就是用 javascript 解释器来评价json 。 当然, 这个方法的提醒是, 您只想要评价未污染的数据( 不可信用户- 输入 ) 。 这是在 node. js 中的一个例子-- 另一个警告, 以下示例将只读过一次数据, 然后它会被缓存 :
data = require(fs.realpathSync(doctree_fp));
推荐文章
- 查询JSON类型内的数组元素
- 将JSON字符串转换为HashMap
- 将JsonNode转换为POJO
- Json_encode()转义正斜杠
- 如何写一个JSON文件在c# ?
- 在序列化和反序列化期间JSON属性的不同名称
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- Ajax会调用什么样的响应,比如'for (;;);{json data}的意思?
- 在JavaScript中将JSON字符串解析为特定对象原型
- 使用Jackson将JSON字符串转换为漂亮的打印JSON输出
- jQuery。由于转义了JSON中的单引号,parseJSON抛出“无效JSON”错误
- 用c#解析JSON
- 如何合并2 JSON对象从2个文件使用jq?
- 在VS Code中禁用“Comments are not allowed In JSON”错误
- 如何在Kotlin解析JSON ?