balping/json-raw-encoder
最新稳定版本:v1.0.2
Composer 安装命令:
composer require balping/json-raw-encoder
包简介
Encode arrays to json with raw JS objects (eg. callbacks) in them
关键字:
README 文档
README
Use this package to encode arrays to JSON with raw JS objects (eg. callbacks) in them.
Installation
composer require balping/json-raw-encoder
Usage
Suppose you need to pass a callback to a JSON object.
<?php
$array = [
'type' => 'cat',
'count' => 42,
'callback' => 'function(a){alert(a);}'
];
?>
<script>
let bar = <?php echo json_encode($array); ?>;
bar.callback('hello'); //error
</script>
However, the above array will be encoded as
{"type":"cat","count":42,"callback":"function(a){alert(a);}"}
On this object, you cannot call callback(), as callback is a string and not a function.
To get around this problem, use Raw objects provided by this package:
<?php
use Balping\JsonRaw\Raw;
use Balping\JsonRaw\Encoder;
$array = [
'type' => 'cat',
'count' => 42,
'callback' => new Raw('function(a){alert(a);}')
];
?>
<script>
let bar = <?php echo Encoder::encode($array); ?>;
bar.callback('hello'); //prints hello
</script>
Now, the encoded JSON looks like this. Notice, that there are no quotation marks around the function.
{"type":"cat","count":42,"callback":function(a){alert(a);}}
Calling bar.callback() now works, as callback is a function and not a string.
Using with third party libraries
It is possible that the serialisation is done by a library (eg. Fractal), and not by your code, i.e. you cannot replace json_encode with Encoder::encode().
In this case, you can still pass callbacks to JSON, by passing the encoded json and an array of all raw objects to Replacer::replace():
use Balping\JsonRaw\Raw;
use Balping\JsonRaw\Replacer;
$rawObjects = [];
$array = [
'type' => 'cat',
'count' => 42,
'callback' => $rawObjects[] = new Raw('function(a){alert(a);}')
];
// you cannot alter the behaviour of a third party encoder
$encoded = $thirdParty->jsonEncode($array);
echo Replacer::replace($encoded, $rawObjects);
Result:
{"type":"cat","count":42,"callback":function(a){alert(a);}}
License
This package is licensed under GPLv3.
Download statistics
统计信息
- 总下载量: 3.09M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 1
- 依赖项目数: 30
- 推荐数: 0
其他信息
- 授权协议: GPL-3.0-only
- 更新时间: 2026-01-04