我应该为所有RESTful JSON交换创建包装器吗?

时间:2011-06-13 13:57:18

标签: php json rest

我有多次调用许多RESTful服务。我在收到数据时使用本机PHP json_decode转换为PHP,并在发送数据时使用json_encode

我担心的是,对于深度嵌套的数据,我最终会编写如下代码:

$interestType = $person['children'][$i]['interests'][$j]['type'];

这可能会变得非常混乱。我觉得在创建方法/实例变量环绕这些结构的对象时会有一些好处,这样我就可以做到:

$interestType = $person->getChild($i)->getInterest($j)->getType();

对我来说似乎更清楚,但实际上它并不简单。

使用本机PHP数组执行所有操作,并为每个REST资源编写包装类有什么好处?

我担心的是我必须编写自定义编码/解码函数来映射到这些包装器。

1 个答案:

答案 0 :(得分:0)

我不熟悉PHP中对象的实现,但是阅读this blogpost about array vs object performance,似乎开销很小。所以我猜它归结为风格偏好。可以在此处找到对象转换器的简单(非嵌套)数组:


妥协,实施起来很简单:

<?php

$json = '{"a": [{"aa" : 11}, {"ab" : 12}],"b":2,"c":3,"d":4,"e":5}';

$o = json_decode($json);       // plain object
$a = json_decode($json, true); // this will yield an array

echo $o->a[0]->aa;

?>

json_decode接受一个可选参数,该参数确定提供的JSON是否转换为关联数组。如果不是($o),那么你的语法就是一半