我有一些与json_encode相关的问题:我需要使用一个大数组(几个100k项),每个都有非常简单的结构(一个键,一个字符串值)。 json_decode工作正常,但只要我想json_encode它,它就非常慢。 由于我在这里完全控制数据,我试着编写一个超级简单的json编码器,而且速度很快。 我很惊讶,因为我的编码功能很粗糙,并且oes没有任何内部的php优化,这些优化肯定存在于json_encode中。
知道问题可能是什么?
我把编码器功能放在下面作为参考。
由于
protected function simpleJsonEncoder($data) {
if (is_array($data)) {
$is_indexed = (array_values($data) === $data);
$tab_str = [];
if ($is_indexed) {
foreach($data as $item) {
$str_item = $this->simpleJsonEncoder($item);
$tab_str[] = $str_item;
}
$result = '[' . implode(',', $tab_str) . ']';
}
else {
foreach($data as $index => $item) {
$str_item = $this->simpleJsonEncoder($item);
$tab_str[] = '"' . htmlspecialchars($index, ENT_QUOTES) . '":' . $str_item;
}
$result = '{' . implode(',', $tab_str) . '}';
}
}
else {
$result = '"' . htmlspecialchars($data, ENT_QUOTES) . '"';
}
return $result;
}
答案 0 :(得分:0)
对于后代:我一直在尝试寻找 json_encode 的替代方法来同步大量数据,序列化速度更快,但返回的字符串显然要大得多。我偶然发现了这个页面。我尝试了这个函数——md5 哈希值与 json_encode 不同,时间差可以忽略不计。从我最近阅读的所有内容来看,他们已经在某处优化了 json_encode。
我使用的是 PHP 7.3,时间以秒为单位(大对象)
"user_func_hash": "xxx",
"user_func_time": 45.33081293106079,
"json_encode_hash": "yyy",
"json_encode_time": 45.759231090545654