开源第1天-PHP-自动解析json生成php类文件,自动映射json到php对象

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

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

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

一、映射 json 到 php 对象

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

    composer require stark641/stark-object
    class FooBarClass extends StarkObject
    {
        /** @var string */
        public $foo;

        /** @var integer */
        public $bar;
    }

    class DemoClass extends StarkObject
    {
        /** @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);

输出

    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 stark641/stark-object 以后,可以使用脚本 vendor/bin/stark-object-gen 来直接生成代码到指定文件夹。

Usage:

  1. 示例
$./vendor/bin/stark-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 查看帮助
$./vendor/bin/stark-object-gen --help
output
stark object generator

Usage:
        ./vendor/bin/stark-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/stark641/stark-object

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值