PHP - 查找和替换JSON数据

时间:2015-04-21 18:10:53

标签: php json

我正在尝试查找下面的json数据替换。我试图将“消费者”替换为“CON”,将“工业”替换为“IND”,将“技术”替换为“TCH”。理想情况下,我想传递一个函数数组的查找(即{“Consumer”,“Industrial”,“Technology”})以及一系列替换(即{“CON”,“IND”,“TCH”) “}),或者其他一些快速定义多个查找和替换对的方法(将会有比这3个更多的对)。这样做的最佳功能是什么?谢谢,任何帮助表示赞赏。

[{"category":"Consumer","price":"18.9","number":"5"},{"category":"Industrial","price":"13.4","number":"4"},{"category":"Technology","price":"15.5","number":"3"}]

2 个答案:

答案 0 :(得分:1)

这是一个解决方案,一个接一个地遍历json数据对象(仅检查键和值,并且只有在键/值完全位于$replaces数组中时才替换

function replace(&$array, $replaces) {
    foreach ($array as $k => $v) {
        $new_k = replace_word($k, $replaces);
        if (is_array($v)) {
            replace($v, $replaces);
        }
        else {
            $v = replace_word($v, $replaces);
        }
        $array[$new_k] = $v;
        if ($new_k != $k) {
            unset($array[$k]);
        }
    }
}

function replace_word($word, $replaces) {
    if (array_key_exists($word, $replaces)) {
        $word = str_replace($word, $replaces[$word], $word);
    }
    return $word;
}

/* TEST FUNCTIONS */
$json = '[{"category":"Consumer","price":"18.9","number":"5"},{"category":"Industrial","price":"13.4","number":"4"},{"category":"Technology","price":"15.5","number":"3"}]';

$replaces = array("category" => "cat", "Consumer" => "cons");
$json_data = json_decode($json, true);
var_dump($json_data);
replace($json_data, $replaces);
var_dump($json_data);
$json = json_encode($json_data);

答案 1 :(得分:0)

preg_replace可以将模式和替换作为数组。

http://php.net/manual/en/function.preg-replace.php

所以,例如:

preg_replace(array('Consumer', 'Industrial', 'Technology'), array('CON', 'IND', 'TCH'), $json);

但请注意,除非您完全确定JSON,否则您可能会更好地解析JSON并替换实际的键/值。