json_file_encode()/json_file_decode(): provide a higher‑level, file‑oriented shortcut
未关闭
还没有人认领这个 Issue。
Extension: json
Feature
Status: Needs Triage
- 主要语言
- C
- 星标
- 40.4k
- 派生
- 8.1k
- 平均合并
- 2 天 13 小时
- 30 天内合并 PR
- 96
描述
Description
Motivation
To load a text file into an array PHP already provides file().
For JSON, however, the common pattern is more verbose:
$data = json_decode(file_get_contents($file), true);
This combination is used so often that it deserves its own pair of helper functions.
Proposed functions
json_file_decode(string $fileName[, ?bool $object = true]): array|object|falsejson_file_encode(string $fileName, array $array): true|false
These functions are meant as convenience wrappers around json_decode and json_encode + file I/O, modeled after helpers such as file().
Behavior and rationale
json_file_decode
- Reads the contents of
$fileNameand decodes it as JSON in one call. - The optional
$objectparameter mirrorsjson_decode’s second argument:true(default): return an associative array.false: return objects.null: treated astrue(array), for consistency withjson_decode.
- Returns the decoded value (
arrayorobject) on success, orfalseon failure (file not readable, missing, or invalid JSON). - On failure, it does not throw by default; consumers can check the return value and inspect
json_last_error()/json_last_error_msg()for details.
json_file_encode
- Encodes
$arrayto a JSON string and writes it to$fileNamein a single call. - Returns
trueon success,falseon failure (encoding error or I/O error). - The implementation should use an atomic‑style write (write to temporary file in the same directory, then
rename) to avoid partial writes or corruption. - Future versions could extend this with flags for options such as pretty‑printing or different JSON constants, but the initial API stays minimal.
Example usage
// Read JSON file into array
$data = json_file_decode('/path/to/config.json');
if ($data === false) {
die('Failed to load or parse JSON.');
}
// Read JSON file into object
$obj = json_file_decode('/path/to/data.json', false);
if ($obj === false) {
die('Failed to load or parse JSON.');
}
// Write array back to JSON file
if (!json_file_encode('/path/to/data.json', $data)) {
die('Failed to write JSON.');
}
Sample PHP implementation
<?php
/**
* Read a JSON file and decode it into an array or object.
*
* @param string $fileName Path to the JSON file.
* @param bool|null $object If true, return associative array; if false, return objects.
* If null, default to true (array).
* @return array|object|false Decoded data, or false on error.
*/
function json_file_decode(string $fileName, ?bool $object = true): array|object|false
{
// Treat null as true (array) for consistency with json_decode.
$assoc = ($object === null) ? true : !$object;
if (!is_readable($fileName)) {
return false;
}
$json = @file_get_contents($fileName);
if ($json === false) {
return false;
}
$data = json_decode($json, $assoc);
return ($data === null && json_last_error() !== JSON_ERROR_NONE) ? false : $data;
}
/**
* Encode an array as JSON and write it to a file.
*
* @param string $fileName Path to the JSON file.
* @param array $array Data to encode and write.
* @return bool True on success, false on failure.
*/
function json_file_encode(string $fileName, array $array): bool
{
$json = json_encode($array, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
if ($json === false) {
return false;
}
// Use a temporary file in the same directory for atomic‑style write.
$dir = dirname($fileName);
$temp = tempnam($dir, 'json_');
if ($temp === false) {
return false;
}
$ok = file_put_contents($temp, $json) !== false;
if ($ok) {
$ok = rename($temp, $fileName);
}
if (!$ok && file_exists($temp)) {
@unlink($temp);
}
return $ok;
}
Compatibility and naming
- The proposed names are descriptive and follow PHP naming conventions for file helpers.
- Return
falseon failure, consistent withfile_get_contentsand similar functions. - The functions do not replace
json_decode/json_encodebut provide a higher‑level, file‑oriented shortcut for one of the most common patterns with JSON in PHP.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先查看 issue 中描述的现有 json_decode()、json_encode()、file_get_contents() 和 file_put_contents() API。确定所提议的面向文件的辅助函数的适当实现和测试,包括解码失败、编码或 I/O 失败以及原子式写入;完成意味着两个函数都符合所述的签名和行为。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- php
- 领域
- backend
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 45/100