承接 balping/json-raw-encoder 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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

statistics

统计信息

  • 总下载量: 3.09M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 1
  • 依赖项目数: 30
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: GPL-3.0-only
  • 更新时间: 2026-01-04