映射未定义的json属性

时间:2017-10-10 10:14:15

标签: php json slim

有人能建议我以一种干净的方式将json解码对象映射到pdo语句吗?

我为不同客户端应用程序请求的crud操作创建了一个api(使用slimslim-pdo)。 有些桌子很大,有几个可以为空的columuns。 这意味着对于大多数情况,发布的json将不会包含所有列数据。

为例:

    $item= json_decode($req->getBody());
    $insertStatement = $pdo->insert(array('prop1', 'prop2', 'prop3',..., 'prop10'))
                           ->into('table')
                           ->values(array($item->prop1, $item->prop2, $item->prop3,..., 'server side value 10') ));

从客户端发布类似的东西......

{“prop”:“foo”,“prop2”:“bar”}

... php记录如下警告:

PHP注意:未定义的属性:stdClass :: $ prop3 in / home / ... on line ...

由于prop3在json中不存在。

我知道使用php property_exists()和/或isset()可以避免这种情况。 但是,在几十个操作代码的所有语句中为所有属性执行此操作将变得庞大而混乱。

我已经用Google搜索了一个干净的解决方案。 最初通过搜索未定义属性的方式充当null。 然后搜索对象映射方法。

有什么建议吗?

非常感谢你! :)

1 个答案:

答案 0 :(得分:0)

我会这样做

$json = '{"prob": "foo", "prop2": "bar"}';
$jsonArray = json_decode($json, true);// this will decode json in array
// $jsonArray will be: ["prop" => "foo", "prop2" => "bar"]
// array_keys will be: ["prop", "prop2"]
// array_values wil be: ["foo", "bar"];

$insertStatement = $pdo->insert(array_keys($jsonArray))
                           ->into('table')
                           ->values(array_values($jsonArray));