eftec / services_json
PHP实现json_encode/decode
2.4
2024-04-06 15:37 UTC
README
PHP 7.2及以上版本的json_encode/decode实现。这个库可以与带引号的键和无引号的键一起工作。
此包提供对JSON表示法的简单编码器和解码器。它旨在与使用HTTPRequest进行服务器通信函数的客户端JavaScript应用程序一起使用 - 数据可以编码为JSON表示法,用于客户端JavaScript,或从传入的JavaScript请求中解码。JSON格式是JavaScript的本地格式,可以直接使用eval()进行评估,无需额外的解析开销。
那么,这个版本的目标是什么?
虽然这个版本的性能并不优于作为扩展提供的json_encode()和json_decode(),但它具有以下特性
- 它不需要扩展。如果您无法安装ext-json,则可以使用此版本。
- 它支持无引号键的JSON(例如JavaScript表示法),{aaa:2,bbb:"hello"}
- 它还可以支持无引号值 {"aaa":2,"bbb":hello}
- 它还可以支持未包裹的内容 "aaa":2,"bbb":"hello" 而不是 {aaa:2,bbb:"hello"}
- 这是一个简单的.php文件,没有依赖。
用法
使用composer开始
- 使用composer安装库
composer require eftec/services_json
- 包含依赖项
use eftec\ServicesJson\Services_JSON; include '../vendor/autoload.php';
查看文件夹examples以获取更多示例
不使用composer开始
-
包含文件
use eftec\ServicesJson\Services_JSON; include 'Services_JSON.php'; // or where is located the file.
解码
将JSON字符串解码为stdclass或关联数组
$json='{"hello":{"a":2,"b":3},"world":[1,2,3,"aaa"]}'; var_dump(Services_JSON::decode($json)); // as stdclass var_dump(Services_JSON::decode($json,Services_JSON::GET_ARRAY)); // as array
它也支持无引号键
$json='{hello:{a:2,b:3},world:[1,2,3,"aaa","bbbb"]}'; // the keys are unquoted. var_dump(Services_JSON::decode($json)); // as stdclass var_dump(Services_JSON::decode($json,Services_JSON::GET_ARRAY)); // as array
JSON未包裹。
使用标志Services_JSON::DECODE_FIX_ROOT,如果原始文本在代码开始处缺少[]和{},它也可以工作。注意,此功能并非万无一失,例如"[1,2,3],[4,5,6]"将不会包裹为"[[1,2,3],[4,5,6]]"。
{"a":222,"b:"ccc"} # normal json
"a":222,"b:"ccc" # json without the root parenthesis.
Services_JSON::decode('1,2,3',Services_JSON::GET_ARRAY | Services_JSON::DECODE_FIX_ROOT); // returns [1,2,3] Services_JSON::decode('"k1":"v1", k2:2',Services_JSON::GET_ARRAY | Services_JSON::DECODE_FIX_ROOT) // returns [ 'k1' => 'v1','k2'=>2]
注意:DECODE_FIX_ROOT标志检测靠近的字符是否为":"或","。如果最近的字符是":",则返回一个对象,否则返回一个列表。如果没有,则返回一个列表。
具有无引号值的JSON
使用标志Services_JSON::DECODE_NO_QUOTE,它还可以在字符串值未引号时工作。
注意:开头和结尾处的不可见字符(制表符、换行符)将被删除。
Services_JSON::decode('{"a":aaa,"b":bbbb,"c": aaaaa}' , Services_JSON::GET_ARRAY | Services_JSON::DECODE_NO_QUOTE) // ['a'=>'aaa','b'=>'bbbb','c' => 'aaaaa']
编码
将值(数组、对象、原始值等)转换为JSON表达式(字符串)
$array=["hello"=>['a'=>2,'b'=>3],'world'=>[1,2,3,"aaa","bbb"]]; $obj=(object)$array; var_dump(Services_JSON::encode($array)); // encode an associative array var_dump(Services_JSON::encode($obj)); // encode an object
变更日志
- 2.4
- 更新要求至php 7.4
- 添加更多类型提示(类型验证)
- 2.3.2
- 添加了decode()的标志DECODE_NO_QUOTE
- 2.3.1
- 删除了未使用的代码
- 修复了注释。
- 代码的25%已被重构。
- 2.3
- 修复了注释中的错别字。
- 添加了phpunit。整个代码都已测试,但特殊编码。
- 2.2
- 现在库是静态的,因此可以调用方法而无需创建实例。
- 如果您想使用非静态库,则安装1.1
- 1.1
- 它与PHP 7.2及以上版本(包括PHP 8.0和8.1)兼容
- 它不需要PECL即可工作。
- 代码已清理
- 删除了Web头部。
- decode()方法可以返回关联数组。
- 1.0.3-1.0.0 PECL版本。它仅适用于PHP 4.x和PHP 5.x