如何编辑JSON对象

时间:2016-08-10 16:54:28

标签: php json

我正在 PHP ,我需要编辑 JSON 输出以仅返回对象>=0并除以100

EG。

$json = {"data":[0,55,78,-32,-46,37]}

所需

$json = {"data":[0,0.55,0.78,0.37]}

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

嗯,我知道这不是最佳做法,但如果它如此简单,您可以执行以下操作。

$json = '{"data":[0,55,78,-32,-46,37]}';

// decoding the string to objects & arrays
$x = json_decode($json);

// applying a function on each value of the array
$x->data = array_map(
               function($a)
               { 
                   if( $a >= 0 ) return $a/100; 
                   else return null; 
               }, 
               $x->data
            );
// Removing empty values of the array
$x->data = array_filter($x->data);

// making a JSON array
$jsonData = json_encode(array_values($x->data));

// inserting a JSON array in a JSON Object
$json = '{"data":' . $jsonData . '}';

// here is your {"data":[0,0.55,0.78,0.37]}
echo $json;

希望它有所帮助!

Btw,我不得不用array_values欺骗json编码,以防止创建对象而不是数据内容的数组。但我想有一种更好的方法,我只是不知道......

编辑:

找出方向:D

从数组中删除空值后,只需执行:

$x->data = array_values($x->data);
$json = json_encode($x);

这将解决问题,它不会与对象的其余部分产生问题。

答案 1 :(得分:0)

的Alessandro:

这是我的方法,随意尝试。 json_decode 以及一个简单的 foreach 可以帮助您......

<强>代码:     

$json = array();
$result = array();

$json = '{"data":[0,55,78,-32,-46,37]}';

$decoded_json=json_decode($json, TRUE);

foreach ($decoded_json['data'] as &$value) {
    if ($value >= 0){
        $value = $value / 100;
        $result[]=$value;
    }

}

echo json_encode($result);

?>

<强>结果:

[0,
0.55,
0.78,
0.37
]