1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- namespace Aws\Api\Parser;
- use Aws\Api\DateTimeResult;
- use Aws\Api\Shape;
- /**
- * @internal Implements standard JSON parsing.
- */
- class JsonParser
- {
- public function parse(Shape $shape, $value)
- {
- if ($value === null) {
- return $value;
- }
- switch ($shape['type']) {
- case 'structure':
- if (isset($shape['document']) && $shape['document']) {
- return $value;
- }
- $target = [];
- foreach ($shape->getMembers() as $name => $member) {
- $locationName = $member['locationName'] ?: $name;
- if (isset($value[$locationName])) {
- $target[$name] = $this->parse($member, $value[$locationName]);
- }
- }
- if (isset($shape['union'])
- && $shape['union']
- && is_array($value)
- && empty($target)
- ) {
- foreach ($value as $key => $val) {
- $target['Unknown'][$key] = $val;
- }
- }
- return $target;
- case 'list':
- $member = $shape->getMember();
- $target = [];
- foreach ($value as $v) {
- $target[] = $this->parse($member, $v);
- }
- return $target;
- case 'map':
- $values = $shape->getValue();
- $target = [];
- foreach ($value as $k => $v) {
- $target[$k] = $this->parse($values, $v);
- }
- return $target;
- case 'timestamp':
- return DateTimeResult::fromTimestamp(
- $value,
- !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
- );
- case 'blob':
- return base64_decode($value);
- default:
- return $value;
- }
- }
- }
|