在php中调用json_decode后,如何连接并仅打印json对象中的值?

时间:2018-08-01 20:13:43

标签: php json

这是一个显示键:值对的模式生成器

 "default": [
                {
                    "one": "u0001u0000u0000u0000",
                    "two": "u0002u0000u0000u0000",
                    "three": "u0003u0000u0000u0000"
                }
            ]

我要打印的是“默认”:[{"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}]

类似地,如果它是一个对象,例如:

"default": [ "a":
                {
                    "one": "u0001u0000u0000u0000",
                    "two": "u0002u0000u0000u0000",
                    "three": "u0003u0000u0000u0000"
                }
            ]

仅连接值并按以下方式打印:

["a": {"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}]

样本代码测试: //此方法获取用户以json格式输入的值。用户也可以使用嵌套的json格式。我提到的上述示例有效。 然后调用scanForNestedType方法,该方法扫描格式是否包含任何数组,array>,map等。 一旦扫描了嵌套类型,它就会在内部调用$ this-> encodeValues($ unit),它将用户输入的值从整数转换为字节。

这里是一个例子:

用户输入数组 [{“一个”:1,“两个”:2,“三个”:3}]。转换后,结果如下: [  {    “一个”:u0001u0000u0000u0000,    “两个”:u00002u0000u0000u0000,    “三:u0003u0000u0000u0000  } ]

现在,我可以正确获取每个键的值。我所需要做的就是以这种格式打印: [   {     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;
}

如果我有一个可行的例子,那就太好了!

1 个答案:

答案 0 :(得分:0)

您可以使用json_decode将json转换为数组。然后使用foreach循环implode子数组['one'....]。

摘要

$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);

输出

{"0":"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}
{"a":"u0001u0000u0000u0000u0002u0000u0000u0000u0003u0000u0000u0000"}

实时Demo

您现在可以json_decode $default1, $default2来获取php对象/数组。