PHP自动解析json生成php类文件,自动映射json到php对象

PHP自动解析json生成php类文件,自动映射json到php对象


2021-09-17

业务中经常需要对接第三方服务,常用的对接方式就是使用 http json 接口,有些 json 格式较为复杂,使用php数组进行数据交互非常麻烦,非常容易出错。

1
2
3
4
5
6
        $responseStr = '{"foo":"bar", "hello":"world"}';
        $responseArr = json_decode($responseStr, true);
        if($responseArr["fooo"] == "foobar") {
            // do sth.
        }
    

现在 IDE 比如 PHPStorm 也不能对数组 进行代码提示,上面的代码是不会有错误提示的;如果把 json 返回值直接映射到预先定义好的对象,岂不是很舒心?

一、映射 json 到 php 对象

我们可以使用 composer 包: nixihz/php-object ,支持复杂 json 到 复杂对象之间的映射。

1
2
        composer require nixihz/php-object
    
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        class FooBarClass extends PhpObject
        {
            /** @var string */
            public $foo;
    
            /** @var integer */
            public $bar;
        }
    
        class DemoClass extends PhpObject
        {
            /** @var FooBarClass */
            public $foobar;
    
            /** @var FooBarClass[] */
            public $foobars;
    
        }
    
        $json = '{"foobar":{"foo":"hello world","bar":64100},"foobars":[{"foo":"hello","bar":641},{"foo":"world","bar":664411}]}';
        $demo = (new DemoClass())->fromJson($json);
    
        if($demo->foobar->foo == "hello world") {
            echo count($demo->foobars);
        }
        var_export($demo);
    

输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
        2
        DemoClass::__set_state(array(
           'foobar' =>
              FooBarClass::__set_state(array(
                 'foo' => 'hello world',
                 'bar' => 64100,
              )),
           'foobars' =>
              array (
                0 =>
                FooBarClass::__set_state(array(
                   'foo' => 'hello',
                   'bar' => 641,
                )),
                1 =>
                FooBarClass::__set_state(array(
                   'foo' => 'world',
                   'bar' => 664411,
                )),
              ),
        ))
    

下一步,这个工具将会提供直接从 json 生成 php 类代码的辅助功能,将会更大提升对接效率。

。。。

二、解析 json 自动生成 php 类文件

来填坑了,安装好 composer require nixihz/php-object 以后,可以使用脚本 vendor/bin/php-object-gen 来直接生成代码到指定文件夹。

Usage:

  1. 示例
1
2
3
4
5
6
7
    $./vendor/bin/php-object-gen --path=/tmp --json='{"foo_bar":{"foo":1.3,"bar":[641,641]}}'
    
    output
    Class FooBar saved at: /tmp/FooBar.php
    Class BaseClass saved at: /tmp/BaseClass.php
    
    
  1. -help 查看帮助
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    $./vendor/bin/php-object-gen --help
    output
    php object generator
    
    Usage:
            ./vendor/bin/php-object-gen --path=/tmp --json='{"foo_bar":{"foo":1.3,"bar":[641,641]}}'
    
    Flags:
    --path          path to save class files (存储类文件路径)
    --baseClassName base class name (最外层类名)
    --fieldCase     field case type 0:keep, 1:snake case, 2:camel case (字段形式)
    --namespace     namespace for class (类命名空间)
    --json          json input (待解析的json文件)
    --help          print this help (输出当前帮助信息)
    

https://github.com/nixihz/php-object

沪ICP备2022013452号-1