映射未定义的json属性



有人能给我推荐一个好的做法吗?用一种干净的方式将json解码的对象映射到pdo语句中?

我已经为不同客户端应用程序请求的crud操作创建了一个api(使用slim和slim-pdo)。有些表很大,有几个可以为null的列。这意味着在大多数情况下,发布的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::$prop3in/home/。。。在线。。。

由于json中不存在prop3。

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

我在谷歌上搜索了一个干净的解决方案。最初通过搜索一种未定义属性的方式充当null。然后寻找对象映射的方法。

有什么建议吗?

非常感谢!:)

我会像这个一样做

$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));

最新更新