如何使用 PHP 解码带有注释的 JSON 文件? [复制]

Posted

技术标签:

【中文标题】如何使用 PHP 解码带有注释的 JSON 文件? [复制]【英文标题】:How can I decode JSON files with comments using PHP? [duplicate] 【发布时间】:2019-02-13 01:02:47 【问题描述】:

在一项任务中,我必须在 JSON 文件中编写 cmets 并使用 PHP 对其进行解码。我分享它。也许它可以帮助别人。正则表达式很难。

【问题讨论】:

当然,如果您将 cmets 添加到原来的 JSON 文件中,则它不再是 JSON 文件,因为 cmets 不是 JSON 规范的一部分!? 是的。确实如此。变成别的东西。它不再是 json。 所以它有点像说当C程序中有COBOL行时如何编译它! JSON 是一种机器对机器的数据传输格式,cmets 没有位置 我的意思是,这是一个需要解决的合法问题 - 肯定有一些人们打算成为 JSON 的文件示例,其中包含 cmets。但这就是说,这不是以前没有回答过的问题,因此发布和回答您自己的问题看起来就像您正在寻找轻松的声誉。这不是发布教程的网站。 【参考方案1】:

用正则表达式删除 cmets

$jsonStringWithComments = file_get_contents ( "jsonFileWithComments.json" );
$pattern = '/(((?<!http:|https:)\/\/.*|(\/\*)([\S\s]*?)(\*\/)))/im';
$decodedObject = json_decode ( preg_replace ( $pattern, '', $jsonStringWithComments ) );

此正则表达式可以捕获“单行”cmets、开始双斜杠 // 或在斜杠星号 /* 和星号斜杠 */ 之间的“多行”cmets。

有了它,你可以像下面这样解析 JSON:


  "lorem": "ipsum",
  "dolor":/* inline comment */ "sit amet",
  "consectetur": "adipiscing",
/*
multi
line
comment
*/  
  "Pellentesque": "ultrices",
//single line comment  
  "lectus": "nec",
  "elit": "dictum",
  "url": "http://example.com"

【讨论】:

以上是关于如何使用 PHP 解码带有注释的 JSON 文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中解码从curl产生的json文件

如何在 PHP 5.1 中解码 json?

如何解码来自列的 Pig 中的 JSON?

如何使用 PHP 解码使用 RFC2231 编码的字符串

如何使用带有 json 和 php 的 jquery 的 $.ajax 函数上传文件

如何使用 cURL 获取 JSON 数据并解码数据?