<?php namespace Averta\WordPress\Utility; class JSON { /** * Detect is JSON * * @param $args * * @return bool */ public static function isJson(...$args) { if(is_array($args[0]) || is_object($args[0])) { return false; } if (trim($args[0]) === '') { return false; } json_decode(...$args); return (json_last_error() == JSON_ERROR_NONE); } /** * Remove extra white-spaces and tabs from json string * * @param string $json * * @return string */ public static function normalize( $json ) { if( ! is_string( $json ) ) { return $json; } if (trim( $json ) === '') { return ''; } $decoded = json_decode( $json ); return (json_last_error() == JSON_ERROR_NONE) ? wp_json_encode( $decoded ) : $json; } /** * Encode a variable into JSON, with some sanity checks. * * @param mixed $value The value being encoded. Can be any type except a resource. * All string data must be UTF-8 encoded. * @param int $flags Options to be passed to json_encode(). Default 0. * @param int $depth Set the maximum depth. Must be greater than zero. * * @return false|string */ public static function encode( $value, $flags = 0, $depth = 512 ) { return wp_json_encode( $value, $flags, $depth ); } /** * Takes a JSON encoded string and converts it into a PHP variable. * * @param string $json The json string being decoded. * @param bool|null $associative When true, JSON objects will be returned as associative arrays; when false, JSON objects will be returned as objects. * When null, JSON objects will be returned as associative arrays or objects depending on whether JSON_OBJECT_AS_ARRAY is set in the flags. * @param int $depth Maximum nesting depth of the structure being decoded. * @param int $flags Bitmask of JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR * * @return mixed */ public static function decode( $json, $associative = null, $depth = 512, $flags = 0 ) { return json_decode( $json, $associative, $depth, $flags ); } }