Skip to content

Commit 7982333

Browse files
committed
[JsonStreamer] Skip properties with null value
1 parent f4f3a32 commit 7982333

20 files changed

+215
-106
lines changed

src/Symfony/Component/JsonStreamer/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CHANGELOG
55
---
66

77
* Remove `nikic/php-parser` dependency
8+
* Skip properties with `null` value
89

910
7.3
1011
---
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Symfony\Component\JsonStreamer\Tests\Fixtures\Model;
4+
5+
use Symfony\Component\JsonStreamer\Attribute\StreamedName;
6+
7+
class DummyWithDollarNamedProperties
8+
{
9+
#[StreamedName('$foo')]
10+
public bool $foo = true;
11+
12+
#[StreamedName('{$foo->bar}')]
13+
public bool $bar = true;
14+
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/null.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
5-
yield 'null';
5+
yield "null";
66
} catch (\JsonException $e) {
77
throw new \Symfony\Component\JsonStreamer\Exception\NotEncodableValueException($e->getMessage(), 0, $e);
88
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/nullable_backed_enum.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
if ($data instanceof \Symfony\Component\JsonStreamer\Tests\Fixtures\Enum\DummyBackedEnum) {
66
yield \json_encode($data->value, \JSON_THROW_ON_ERROR, 512);
77
} elseif (null === $data) {
8-
yield 'null';
8+
yield "null";
99
} else {
1010
throw new \Symfony\Component\JsonStreamer\Exception\UnexpectedValueException(\sprintf('Unexpected "%s" value.', \get_debug_type($data)));
1111
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/nullable_object.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
55
if ($data instanceof \Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNameAttributes) {
6-
yield '{"@id":';
6+
$prefix1 = '';
7+
yield "{{$prefix1}\"@id\":";
78
yield \json_encode($data->id, \JSON_THROW_ON_ERROR, 511);
8-
yield ',"name":';
9+
$prefix1 = ',';
10+
yield "{$prefix1}\"name\":";
911
yield \json_encode($data->name, \JSON_THROW_ON_ERROR, 511);
10-
yield '}';
12+
yield "}";
1113
} elseif (null === $data) {
12-
yield 'null';
14+
yield "null";
1315
} else {
1416
throw new \Symfony\Component\JsonStreamer\Exception\UnexpectedValueException(\sprintf('Unexpected "%s" value.', \get_debug_type($data)));
1517
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/nullable_object_dict.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@
33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
55
if (\is_array($data)) {
6-
yield '{';
7-
$prefix = '';
6+
yield "{";
7+
$prefix1 = '';
88
foreach ($data as $key => $value) {
99
$key = \substr(\json_encode($key), 1, -1);
10-
yield "{$prefix}\"{$key}\":";
11-
yield '{"@id":';
10+
$prefix2 = '';
11+
yield "{$prefix1}\"{$key}\":{{$prefix2}\"@id\":";
1212
yield \json_encode($value->id, \JSON_THROW_ON_ERROR, 510);
13-
yield ',"name":';
13+
$prefix2 = ',';
14+
yield "{$prefix2}\"name\":";
1415
yield \json_encode($value->name, \JSON_THROW_ON_ERROR, 510);
15-
yield '}';
16-
$prefix = ',';
16+
yield "}";
17+
$prefix1 = ',';
1718
}
18-
yield '}';
19+
yield "}";
1920
} elseif (null === $data) {
20-
yield 'null';
21+
yield "null";
2122
} else {
2223
throw new \Symfony\Component\JsonStreamer\Exception\UnexpectedValueException(\sprintf('Unexpected "%s" value.', \get_debug_type($data)));
2324
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/nullable_object_list.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@
33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
55
if (\is_array($data)) {
6-
yield '[';
7-
$prefix = '';
6+
yield "[";
7+
$prefix1 = '';
88
foreach ($data as $value) {
9-
yield $prefix;
10-
yield '{"@id":';
9+
$prefix2 = '';
10+
yield "{$prefix1}{{$prefix2}\"@id\":";
1111
yield \json_encode($value->id, \JSON_THROW_ON_ERROR, 510);
12-
yield ',"name":';
12+
$prefix2 = ',';
13+
yield "{$prefix2}\"name\":";
1314
yield \json_encode($value->name, \JSON_THROW_ON_ERROR, 510);
14-
yield '}';
15-
$prefix = ',';
15+
yield "}";
16+
$prefix1 = ',';
1617
}
17-
yield ']';
18+
yield "]";
1819
} elseif (null === $data) {
19-
yield 'null';
20+
yield "null";
2021
} else {
2122
throw new \Symfony\Component\JsonStreamer\Exception\UnexpectedValueException(\sprintf('Unexpected "%s" value.', \get_debug_type($data)));
2223
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/object.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
5-
yield '{"@id":';
5+
$prefix1 = '';
6+
yield "{{$prefix1}\"@id\":";
67
yield \json_encode($data->id, \JSON_THROW_ON_ERROR, 511);
7-
yield ',"name":';
8+
$prefix1 = ',';
9+
yield "{$prefix1}\"name\":";
810
yield \json_encode($data->name, \JSON_THROW_ON_ERROR, 511);
9-
yield '}';
11+
yield "}";
1012
} catch (\JsonException $e) {
1113
throw new \Symfony\Component\JsonStreamer\Exception\NotEncodableValueException($e->getMessage(), 0, $e);
1214
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/object_dict.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22

33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
5-
yield '{';
6-
$prefix = '';
5+
yield "{";
6+
$prefix1 = '';
77
foreach ($data as $key => $value) {
88
$key = \substr(\json_encode($key), 1, -1);
9-
yield "{$prefix}\"{$key}\":";
10-
yield '{"@id":';
9+
$prefix2 = '';
10+
yield "{$prefix1}\"{$key}\":{{$prefix2}\"@id\":";
1111
yield \json_encode($value->id, \JSON_THROW_ON_ERROR, 510);
12-
yield ',"name":';
12+
$prefix2 = ',';
13+
yield "{$prefix2}\"name\":";
1314
yield \json_encode($value->name, \JSON_THROW_ON_ERROR, 510);
14-
yield '}';
15-
$prefix = ',';
15+
yield "}";
16+
$prefix1 = ',';
1617
}
17-
yield '}';
18+
yield "}";
1819
} catch (\JsonException $e) {
1920
throw new \Symfony\Component\JsonStreamer\Exception\NotEncodableValueException($e->getMessage(), 0, $e);
2021
}

src/Symfony/Component/JsonStreamer/Tests/Fixtures/stream_writer/object_in_object.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@
22

33
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
44
try {
5-
yield '{"name":';
5+
$prefix1 = '';
6+
yield "{{$prefix1}\"name\":";
67
yield \json_encode($data->name, \JSON_THROW_ON_ERROR, 511);
7-
yield ',"otherDummyOne":{"@id":';
8+
$prefix1 = ',';
9+
yield "{$prefix1}\"otherDummyOne\":";
10+
$prefix2 = '';
11+
yield "{{$prefix2}\"@id\":";
812
yield \json_encode($data->otherDummyOne->id, \JSON_THROW_ON_ERROR, 510);
9-
yield ',"name":';
13+
$prefix2 = ',';
14+
yield "{$prefix2}\"name\":";
1015
yield \json_encode($data->otherDummyOne->name, \JSON_THROW_ON_ERROR, 510);
11-
yield '},"otherDummyTwo":{"id":';
16+
yield "}{$prefix1}\"otherDummyTwo\":";
17+
$prefix2 = '';
18+
yield "{{$prefix2}\"id\":";
1219
yield \json_encode($data->otherDummyTwo->id, \JSON_THROW_ON_ERROR, 510);
13-
yield ',"name":';
20+
$prefix2 = ',';
21+
yield "{$prefix2}\"name\":";
1422
yield \json_encode($data->otherDummyTwo->name, \JSON_THROW_ON_ERROR, 510);
15-
yield '}}';
23+
yield "}}";
1624
} catch (\JsonException $e) {
1725
throw new \Symfony\Component\JsonStreamer\Exception\NotEncodableValueException($e->getMessage(), 0, $e);
1826
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy