11fa8c418SNickeau<?php 21fa8c418SNickeau 31fa8c418SNickeau 41fa8c418SNickeaunamespace ComboStrap; 51fa8c418SNickeau 61fa8c418SNickeau 71fa8c418SNickeauclass Json 81fa8c418SNickeau{ 91fa8c418SNickeau 10*c3437056SNickeau const TYPE_OBJECT = "{"; 11*c3437056SNickeau const PARENT_TYPE_ARRAY = "["; 12*c3437056SNickeau const TAB_SPACES_COUNTER = 4; 13*c3437056SNickeau const EXTENSION = "json"; 14*c3437056SNickeau 15*c3437056SNickeau /** 16*c3437056SNickeau * @var array 17*c3437056SNickeau */ 18*c3437056SNickeau private $jsonArray; 19*c3437056SNickeau 20*c3437056SNickeau /** 21*c3437056SNickeau * Json constructor. 22*c3437056SNickeau * @param array|null $jsonValue 23*c3437056SNickeau */ 24*c3437056SNickeau public function __construct(?array $jsonValue = null) 251fa8c418SNickeau { 26*c3437056SNickeau $this->jsonArray = $jsonValue; 27*c3437056SNickeau 281fa8c418SNickeau } 29*c3437056SNickeau 30*c3437056SNickeau public static function createEmpty(): Json 31*c3437056SNickeau { 32*c3437056SNickeau return new Json([]); 33*c3437056SNickeau } 34*c3437056SNickeau 35*c3437056SNickeau public static function createFromArray(array $actual): Json 36*c3437056SNickeau { 37*c3437056SNickeau return new Json($actual); 38*c3437056SNickeau } 39*c3437056SNickeau 40*c3437056SNickeau public static function getValidationLink(string $json): string 41*c3437056SNickeau { 42*c3437056SNickeau return "See the errors it by clicking on <a href=\"https://jsonformatter.curiousconcept.com/?data=" . urlencode($json) . "\">this link</a>"; 43*c3437056SNickeau } 44*c3437056SNickeau 45*c3437056SNickeau /** 46*c3437056SNickeau * Used to make diff 47*c3437056SNickeau * @return false|string 48*c3437056SNickeau */ 49*c3437056SNickeau public function toNormalizedJsonString() 50*c3437056SNickeau { 51*c3437056SNickeau $jsonArray = $this->getJsonArray(); 52*c3437056SNickeau if ($jsonArray === null) { 53*c3437056SNickeau /** 54*c3437056SNickeau * Edge case empty string 55*c3437056SNickeau */ 56*c3437056SNickeau return ""; 57*c3437056SNickeau } 58*c3437056SNickeau return json_encode($jsonArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); 59*c3437056SNickeau } 60*c3437056SNickeau 61*c3437056SNickeau /** 62*c3437056SNickeau * This formatting make the object on one line for a list of object 63*c3437056SNickeau * making the frontmatter compacter (one line, one meta) 64*c3437056SNickeau * @return string 65*c3437056SNickeau * @deprecated You should use the {@link MetadataFrontmatterStore::toFrontmatterJsonString()} instead 66*c3437056SNickeau */ 67*c3437056SNickeau public function toFrontMatterFormat(): string 68*c3437056SNickeau { 69*c3437056SNickeau 70*c3437056SNickeau $jsonArray = $this->getJsonArray(); 71*c3437056SNickeau return MetadataFrontmatterStore::toFrontmatterJsonString($jsonArray); 72*c3437056SNickeau 73*c3437056SNickeau } 74*c3437056SNickeau 75*c3437056SNickeau 76*c3437056SNickeau /** 77*c3437056SNickeau * @throws ExceptionCombo 78*c3437056SNickeau */ 79*c3437056SNickeau public 80*c3437056SNickeau static function createFromString($jsonString): Json 81*c3437056SNickeau { 82*c3437056SNickeau if($jsonString===null || $jsonString === "" ){ 83*c3437056SNickeau return new Json(); 84*c3437056SNickeau } 85*c3437056SNickeau $jsonArray = json_decode($jsonString, true); 86*c3437056SNickeau if ($jsonArray === null) { 87*c3437056SNickeau throw new ExceptionCombo("The string is not a valid json. Value: ($jsonString)"); 88*c3437056SNickeau } 89*c3437056SNickeau return new Json($jsonArray); 90*c3437056SNickeau } 91*c3437056SNickeau 92*c3437056SNickeau /** 93*c3437056SNickeau * @return mixed 94*c3437056SNickeau */ 95*c3437056SNickeau public 96*c3437056SNickeau function toJsonObject() 97*c3437056SNickeau { 98*c3437056SNickeau $jsonString = $this->getJsonString(); 99*c3437056SNickeau return json_decode($jsonString); 100*c3437056SNickeau 101*c3437056SNickeau } 102*c3437056SNickeau 103*c3437056SNickeau public 104*c3437056SNickeau function toArray(): ?array 105*c3437056SNickeau { 106*c3437056SNickeau return $this->getJsonArray(); 107*c3437056SNickeau 108*c3437056SNickeau } 109*c3437056SNickeau 110*c3437056SNickeau public 111*c3437056SNickeau function toPrettyJsonString() 112*c3437056SNickeau { 113*c3437056SNickeau return $this->toNormalizedJsonString(); 114*c3437056SNickeau } 115*c3437056SNickeau 116*c3437056SNickeau private 117*c3437056SNickeau function getJsonString() 118*c3437056SNickeau { 119*c3437056SNickeau return json_encode($this->jsonArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); 120*c3437056SNickeau } 121*c3437056SNickeau 122*c3437056SNickeau /** 123*c3437056SNickeau * @return array|null 124*c3437056SNickeau */ 125*c3437056SNickeau private 126*c3437056SNickeau function getJsonArray(): ?array 127*c3437056SNickeau { 128*c3437056SNickeau return $this->jsonArray; 129*c3437056SNickeau } 130*c3437056SNickeau 131*c3437056SNickeau public 132*c3437056SNickeau function toMinifiedJsonString() 133*c3437056SNickeau { 134*c3437056SNickeau return json_encode($this->jsonArray); 135*c3437056SNickeau } 136*c3437056SNickeau 137*c3437056SNickeau 1381fa8c418SNickeau} 139