This is a schema generator that displays the key:value pair
"default": [
{
"one": "u0001u0000u0000u0000",
"two": "u0002u0000u0000u0000",
"three": "u0003u0000u0000u0000"
}
]
What I would like to print out is "default": [{"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}]
Similarly if it is an object for instance:
"default": [ "a":
{
"one": "u0001u0000u0000u0000",
"two": "u0002u0000u0000u0000",
"three": "u0003u0000u0000u0000"
}
]
concatenate only values and print like this:
["a": {"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}]
Sample Code Test: // this method gets the value entered by user in json format. The user can put in a nested json format as well. The above examples that I mentioned works. it then calls for scanForNestedType method which scans whether the format contains any array, array>, map etc... Once it scans for nested type, it internally calls $this->encodeValues($unit)which converts the values entered by user from integer to bytes.
Here is an example:
User enters array [{"one": 1, "two": 2, "three": 3}]. After conversion, the result would be as follows: [ { "one": u0001u0000u0000u0000, "two": u00002u0000u0000u0000, "three: u0003u0000u0000u0000 } ]
Now I am getting the values correctly for each key. All I need is to print in this format: [ { u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000 } ]
private function jsonDecode(array $value)
{
$strValue = $value['value'];
$jsonValue = json_decode($strValue);
$this->scanForNestedType($jsonValue);
return $jsonValue;
}
private function scanForNestedType(&$value)
{
foreach ($value as $key => &$unit) {
if (is_array($unit) || is_object($unit)) {
$this->scanForNestedType($unit);
} else {
$value->$key = $this->encodeValues($unit);
}
}
}
private function encodeValues(int $value)
{
$encodedValue = '';
$bytesArray = unpack("C*", pack("V", $value));
foreach ($bytesArray as $byte) {
$encodedValue .= sprintf('u%04x', dechex($byte));
}
return $encodedValue;
}
If I get a working example then it would be great!
You can use json_decode
to convert json to an array. Then implode
sub-array ['one'....] using foreach loop.
snippet
$json1 = '[{"one": "u0001u0000u0000u0000", "two": "u0002u0000u0000u0000", "three": "u0003u0000u0000u0000"}]';
$json2 = '[{ "a": { "one": "u0001u0000u0000u0000", "two": "u0002u0000u0000u0000", "three": "u0003u0000u0000u0000" } }]';
$arr1 = json_decode($json1,true);
$arr2 = json_decode($json2,true);
foreach($arr1 as $data){
$default1[] = implode($data);
}
$default1 = json_encode($default1, JSON_FORCE_OBJECT);
foreach($arr2 as $key => $child){
foreach($child as $childKey => $data){
$default2[$childKey] = implode($data);
}
}
$default2 = json_encode($default2, JSON_FORCE_OBJECT);
print_r($default1);
print_r($default2);
Output
{"0":"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}
{"a":"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}
Live Demo
You can now json_decode
$default1, $default2
to get php object/array.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.