JsonParser.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace Aws\Api\Parser;
  3. use Aws\Api\DateTimeResult;
  4. use Aws\Api\Shape;
  5. /**
  6. * @internal Implements standard JSON parsing.
  7. */
  8. class JsonParser
  9. {
  10. public function parse(Shape $shape, $value)
  11. {
  12. if ($value === null) {
  13. return $value;
  14. }
  15. switch ($shape['type']) {
  16. case 'structure':
  17. $target = [];
  18. foreach ($shape->getMembers() as $name => $member) {
  19. $locationName = $member['locationName'] ?: $name;
  20. if (isset($value[$locationName])) {
  21. $target[$name] = $this->parse($member, $value[$locationName]);
  22. }
  23. }
  24. return $target;
  25. case 'list':
  26. $member = $shape->getMember();
  27. $target = [];
  28. foreach ($value as $v) {
  29. $target[] = $this->parse($member, $v);
  30. }
  31. return $target;
  32. case 'map':
  33. $values = $shape->getValue();
  34. $target = [];
  35. foreach ($value as $k => $v) {
  36. $target[$k] = $this->parse($values, $v);
  37. }
  38. return $target;
  39. case 'timestamp':
  40. return DateTimeResult::fromTimestamp(
  41. $value,
  42. !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
  43. );
  44. case 'blob':
  45. return base64_decode($value);
  46. default:
  47. return $value;
  48. }
  49. }
  50. }