1. Go to this page and download the library: Download vcn/pipette library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Vcn\Pipette\Json;
$input = <<<JSON
{
"a": [1,2,3],
"b": [4,5,6]
}
JSON;
try {
$json = Json::parse($input);
$a = $json->field('a'); // Assert this is an object, assert the field 'a' is present, then retrieve it.
$b = $json->field('b');
$as = $a->arrayMap( // Assert the 'a' field is an array.
function (Json\Value $value) {
return $value->int(); // Assert each value in that array is a number and return those numbers as an array of ints.
}
);
$bs = $b->arrayMap(
function (Json\Value $value) {
return $value->int();
}
);
print_r(array_sum(array_merge($as, $bs))); // 21
} catch (Json\Exception\CantDecode | Json\Exception\AssertionFailed $e) {
error_log($e);
}
use Vcn\Pipette\Json;
$input = <<<JSON
{
"a": "some string"
}
JSON;
try {
$json = Json::parse($input);
// Expect $ to be an object, expect field $.a to be present and expect it to be a string or null:
$foo = $json->field('a')->¿string();
// Expect $ to be an object, if $.a is not present return null, otherwise expect field $.a to be a string or null:
$bar = $json->¿field('a')->¿string();
print_r([$foo, $bar]);
// $.a is present but $.a is not an object, therefore this fails:
$baz = $json->¿field('a')->¿field('b')->¿string();
print_r($baz);
} catch (Json\Exception\CantDecode | Json\Exception\AssertionFailed $e) {
error_log($e);
}
use Vcn\Pipette\Json;
$inputA = <<<JSON
{
"a": "some string"
}
JSON;
$inputB = <<<JSON
{
"b": 42
}
JSON;
try {
foreach ([$inputA, $inputB] as $input) {
$json = Json::parse($input);
// With the first input this parser will match its first composite,
// with the second input the first composite parser fails and falls back to the second.
// In practice you will either coerce these different types or construct members of a sealed trait.
$foo = $json->either(
function (Json\Value $json) {
return $json->field('a')->string();
},
function (Json\Value $json) {
return $json->field('b')->int();
}
);
print_r($foo);
}
} catch (Json\Exception\CantDecode | Json\Exception\AssertionFailed $e) {
error_log($e);
}
namespace Vcn\Pipette\Examples;
use JsonSchema\Validator;
use Vcn\Pipette\Json;
use Vcn\Pipette\Json\Validators\JsonSchemaRepository;
// Define a dependency.
// This looks for schema files inside the current directory.
// See the json-schema library to tailor this behaviour.
$validator = new Validator();
$baseUri = "file://" . __DIR__;
$schemas = new JsonSchemaRepository($validator, $baseUri);
try {
// Somewhere that has access to this dependency.
$parseInt = function (Json\Value $json) {
return $json->int();
};
$parseColor = function (Json\Value $json) use ($parseInt) {
$name = $json->field('name')->string();
$category = $json->field('category')->string();
$type = $json->¿field('type')->¿string();
$codeRgba = $json->field('code')->field('rgba')->arrayMap($parseInt);
$codeHex = $json->field('code')->field('hex')->string();
return [$name, $category, $type, $codeRgba, $codeHex];
};
$input = file_get_contents(__DIR__ . '/colors.json');
$json = $schemas->get('/colors.schema.json')->parse($input); // Use the colors.schema.json schema to first validate the JSON before returning.
$colors = $json->apply($parseColor);
print_r($colors);
} catch (Json\Exception\CantDecode | Json\Exception\AssertionFailed $e) {
echo $e->getMessage() . "\n";
}
use Vcn\Pipette\Json;
try {
$data = (object)[
'foo' => 'bar',
'baz' => 123,
'seventeen' => (object)[
'eighteen',
'nineteen',
]
];
// The object casts are necessary since json_decode produces an stdClass for JSON objects.
$json = Json::pretend($data);
$bar = $json->field('foo')->string();
print_r($bar);
} catch (Json\Exception\AssertionFailed $e) {
error_log($e);
}
# default (using pcov)
php vendor/bin/phpspec run
# xdebug coverage
XDEBUG_MODE=coverage php vendor/bin/phpspec run
# no code coverage
php vendor/bin/phpspec run -c phpspec-nocc.yml
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.