【问题标题】:Valid JSON from text file来自文本文件的有效 JSON
【发布时间】:2021-11-30 21:40:48
【问题描述】:

我知道还有其他类似的帖子关于这个,我要疯了。

我有一些带有一些 JSON 的文件(根据在线验证器都是有效的,例如 jsonlint) - 请参阅下面的编辑。

$contents = file_get_contents(DATA_PATH.'/'.$type.'.json');  
$data = json_decode($contents, true);
echo var_dump($data);

返回 NULL

如果我回显 $contents,我会得到输出。

我不知道出了什么问题?我了解 file_get_contents 将其转换为字符串,但是,如何将其转换为有效的 JSON?使用 fopen() 会有什么不同吗?

我什至将 JSON 添加到变量中,但结果相同......我一定很愚蠢。

注意:我将获得的大多数 JSON 将来自 API,这些基于文件的 JSON 用于测试目的。

谢谢。

编辑:示例 json

{
    "data": [{
            "id": 1,
            "name": "Albania",
            "alpha2code": "AL",
            "alpha3code": "ALB",
            "capital": "Tirana",
            "flag": "https://cdn.elenasport.io/flags/svg/1",
            "region": "Europe",
            "subregion": "Southern Europe",
            "timezones": [
                "UTC+01:00"
            ]
        },
        {
            "id": 3,
            "name": "Algeria",
            "alpha2code": "DZ",
            "alpha3code": "DZA",
            "capital": "Algiers",
            "flag": "https://cdn.elenasport.io/flags/svg/3",
            "region": "Africa",
            "subregion": "Northern Africa",
            "timezones": [
                "UTC+01:00"
            ]
        }]
}

【问题讨论】:

  • 1) 检查json_last_error_msg 找出错误所在。 2) 将它和您正在使用的示例 JSON 文件添加到您的问题中。没有看到这些,我们所能做的就是猜测。
  • var_dump 没有返回值,它将信息直接转储到响应中。不需要echo
  • 使用 json 示例更新帖子
  • 我复制/粘贴了您的 JSON 并设法将其发送到 json_decode。问题一定出在其他地方。你说$contents有值,var_dump($data)显示NULL

标签: php json file


【解决方案1】:

您的文件可能有一个UTF-8 BOM,当您将示例 JSON 复制并粘贴到(基于网络的)验证器时,它不会被复制。它是文件开头的隐形标记。

如果您运行echo bin2hex(file_get_contents(DATA_PATH.'/'.$type.'.json')),您的文件应该7b 开头,即{

如果它以efbbbf 开头,然后是7b,则有一个BOM。要么自己删除它,要么使用像 Sublime Text 这样的文本编辑器重新保存你的 JSON,它允许你配置它。

【讨论】:

  • 是的,文件是这样保存的……不是从 7b 开始的
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多