【问题标题】:Instantiate an stdClass object from json schema specification in PHP从 PHP 中的 json 模式规范实例化一个 stdClass 对象
【发布时间】:2014-01-31 16:50:28
【问题描述】:

我有一组 JSON 请求,我必须将它们发送到 RESTFul API 以获取一些响应对象,你知道,这对于 web 应用程序来说很常见,但是这些 API 请求对象已正确记录在 json 模式规范中每个,所以我想加载这些模式文件并根据该信息创建stdClass对象实例自动

有没有办法通过库或 PHP 中的东西来做到这一点? (不想重新发明轮子)

谢谢!

编辑:查看this schema file,其中包含我想从中加载和构建对象实例的示例。

免责声明: 我知道json_encode / json_decode 这不是我要找的。使用它我需要遍历返回的模式对象,然后根据读取的模式创建另一个对象/数组,这不是我想要的。

【问题讨论】:

  • 我不明白你的问题。 json_decode 已经返回 stdClass 对象。
  • 看这里:github.com/tangocarddev/RaaS/blob/master/… 这是一个对象的模式,它定义了它。我想以某种方式加载该 json 并能够基于该架构创建实例。
  • 那么stdClass 的固定是什么?您可以将其作为数组并序列化为 JSON。这个模式看起来非常复杂(在验证方面),(据我所知)没有标准功能可以为您做到这一点。如果您放宽对输入的要求(如正则表达式),您可以编写一个实例生成器。因为这是你的问题:我怎样才能生成一个匹配这个正则表达式的字符串?这很难解决。
  • @FritsvanCampen 我没有任何固定,如果已经有什么我不想自己做。最后,我可能会像你说的那样结束,根据那里定义的属性序列化、遍历和创建实例
  • 您是否同意“为模式生成有效实例”会是一个更好的问题描述?

标签: php json rest


【解决方案1】:

我认为没有内置的方法可以做到这一点,但实现起来应该相对简单:

function createObj( $json ) {
    $obj_schema = json_decode($json, true);
    $new_obj = new StdClass;
    foreach($obj_schema['properties'] as $property) {
      $new_obj->{$property} = null;
    }

    return $new_obj;
}

【讨论】:

  • 这正是我现在正在做的事情!,伟大的思想都一样:)
猜你喜欢
  • 2018-12-18
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多