Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4149679
Json.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
Json.php
View Options
<?php
declare
(
strict_types
=
1
);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
PHPUnit\Util
;
use
const
JSON_PRETTY_PRINT
;
use
const
JSON_UNESCAPED_SLASHES
;
use
const
JSON_UNESCAPED_UNICODE
;
use
function
count
;
use
function
is_array
;
use
function
is_object
;
use
function
json_decode
;
use
function
json_encode
;
use
function
json_last_error
;
use
function
ksort
;
use
PHPUnit\Framework\Exception
;
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final
class
Json
{
/**
* Prettify json string.
*
* @throws Exception
*/
public
static
function
prettify
(
string
$json
):
string
{
$decodedJson
=
json_decode
(
$json
,
false
);
if
(
json_last_error
())
{
throw
new
Exception
(
'Cannot prettify invalid json'
,
);
}
return
json_encode
(
$decodedJson
,
JSON_PRETTY_PRINT
|
JSON_UNESCAPED_SLASHES
|
JSON_UNESCAPED_UNICODE
);
}
/**
* To allow comparison of JSON strings, first process them into a consistent
* format so that they can be compared as strings.
*
* @return array ($error, $canonicalized_json) The $error parameter is used
* to indicate an error decoding the json. This is used to avoid ambiguity
* with JSON strings consisting entirely of 'null' or 'false'.
*/
public
static
function
canonicalize
(
string
$json
):
array
{
$decodedJson
=
json_decode
(
$json
);
if
(
json_last_error
())
{
return
[
true
,
null
];
}
self
::
recursiveSort
(
$decodedJson
);
$reencodedJson
=
json_encode
(
$decodedJson
);
return
[
false
,
$reencodedJson
];
}
/**
* JSON object keys are unordered while PHP array keys are ordered.
*
* Sort all array keys to ensure both the expected and actual values have
* their keys in the same order.
*/
private
static
function
recursiveSort
(&
$json
):
void
{
if
(!
is_array
(
$json
))
{
// If the object is not empty, change it to an associative array
// so we can sort the keys (and we will still re-encode it
// correctly, since PHP encodes associative arrays as JSON objects.)
// But EMPTY objects MUST remain empty objects. (Otherwise we will
// re-encode it as a JSON array rather than a JSON object.)
// See #2919.
if
(
is_object
(
$json
)
&&
count
((
array
)
$json
)
>
0
)
{
$json
=
(
array
)
$json
;
}
else
{
return
;
}
}
ksort
(
$json
);
foreach
(
$json
as
$key
=>
&
$value
)
{
self
::
recursiveSort
(
$value
);
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Aug 19 2026, 19:15 (6 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
92/09/e5cefbe8007e7866af6f0147664a
Default Alt Text
Json.php (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment