JSON 解析器 simdjson-php

Apache
C/C++ 查看源码»
跨平台
2019-05-30
crazyxman

介绍

simdjson_php是一个php扩展,它绑定simdjson来实现快速解析,simdjson是一个高速的json解析器,它使用了大多数SIMD单一指令。simdjson介绍:https://github.com/lemire/simdjson

环境依赖

  1. php7+

  2. 带有AVX2的处理器(即,2013年发布的Haswell微体系结构的Intel处理器和2017年发布的Zen微体系结构的AMD处理器)
  3. 最近的C ++编译器(例如,GNU GCC或LLVM CLANG或Visual Studio 2017),我们假设C ++ 17。GNU GCC 7或更高版本或LLVM的clang 6或更高版本
  4. 检查操作系统/处理器是否支持它:

        OS X: sysctl -a | grep machdep.cpu.leaf7_features
        Linux: grep avx2 /proc/cpuinfo

使用简介

1. 当需要获取一个较大json串中的某个key时 使用simdjson_key_value() 是比较合适的,不像json_decode() 把整个json串解析成数组,开辟不必要的内存。

2. 当验证一个字符串是否为json时simdjson_isvaild() 是比较合适的,并且是非常快的,同样不需要通过json_decode()来验证。

//检查字符串是否为一个有效的json:
$isValid = simdjson_isvalid($jsonString); //return bool

//解析一个json字符串,返回数组,对象,null,类似json_decode(),第三个参数为解析的深度
$parsedJSON = simdjson_decode($jsonString, true, 512); //return array|object|null. "null" string is not a standard json

/*
{
  "Image": {
    "Width":  800,
    "Height": 600,
    "Title":  "View from 15th Floor",
    "Thumbnail": {
      "Url":    "http://www.example.com/image/481989943",
      "Height": 125,
      "Width":  100
    },
    "Animated" : false,
    "IDs": [116, 943, 234, 38793, {"p": "30"}]
  }
}
*/

//注意. "\t" 是一个分割符. 它必须是一个控制字符. 它用来分割对象的key或数组的下标
//例如. "Image\tThumbnail\tUrl" 是正确. 'Image\tThumbnail\tUrl' 是错误的


//根据json串获取指定key的值
$value = simdjson_key_value($jsonString, "Image\tThumbnail\tUrl");
var_dump($value); // string(38) "http://www.example.com/image/481989943"

$value = simdjson_key_value($jsonString, "Image\tIDs\t4", true);
var_dump($value); 
/*
array(1) {
  ["p"]=>
  string(2) "30"
}
*/

//获取json解析后的资源,只解析一次,后续使用不再解析
$resource = simdjson_resource($jsonString);
//根据json资源获取指定key的值
$value = simdjson_key_value($resource, "Image\tThumbnail\tUrl");
var_dump($value); // string(38) "http://www.example.com/image/481989943"

$value = simdjson_key_value($resource, "Image\tIDs\t4", true);
var_dump($value); 
/*
array(1) {
  ["p"]=>
  string(2) "30"
}
*/

//检查key是否存在,参数可以是一个json串也可以是一个json资源,返回true,false,null。当第一个参数是字符串时返回null代表解析失败
$res = simdjson_key_exists($jsonString, "Image\tIDs\t1");
var_dump($res) //bool(true)
$res = simdjson_key_exists($resource, "Image\tIDs\t1");
var_dump($res) //bool(true)

性能对比(秒)

  测试脚本:

  • php benchmark/benchmark.php
的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

PHP学习线路图

PHP学习线路图 PHP教程 PHP教程 PHP简介 PHP环境设置 PHP语法概述 PHP变量类型 PHP常量类型 PHP运算符类型 PHP 条件语句 PHP循环语句 PHP数组 PHP字符串操作 PHP Web概念 PHP的GET和POST方法...

2018/10/11 09:42
143
2
ini_set

Name Default Changeable com.allow_dcom "0" PHP_INI_SYSTEM com.autoregister_typelib "0" PHP_INI_SYSTEM com.autoregister_verbose "0" PHP_INI_SYSTEM com.autoregister_casesensitive ...

2013/12/31 16:07
22
0
PHP教程

PHP教程 PHP教程 PHP简介 PHP环境设置 PHP语法概述 PHP变量类型 PHP常量类型 PHP运算符类型 PHP 条件语句 PHP循环语句 PHP数组 PHP字符串操作 PHP Web概念 PHP的GET和POST方法 PHP 文件包含 ...

2018/12/20 11:25
58
0
使用阿里云CentOS安装LAMP时,安装PHP扩展需要注意的事情

阿里云的CentOS中,repo是更改过的,有安装epel的repo,之前使用命令: yum install httpd php-* mysql-server -y 这个命令,将不在适用,epel的加入,使得依赖关系比较混乱。正确的安装方法...

2018/10/13 10:02
10
0
在CentOS/RHEL 6.5上使用YUM安装PHP5.4或PHP5.5

阿里云安装PHP5.4,,阿里云安装安装PHP5.5

2014/11/29 10:54
19K
0
window php apache mysql一些疑问

php-apache Apache httpd.conf: PHPIniDir "D:/php/tool/php" LoadModule php5_module "D:/php/tool/php/php5apache2_2.dll" AddType application/x-httpd-php .php AddType application/x-h...

2014/11/05 21:27
28
0
centos6.5 yum安装php5.5,mysql5.5.46 ,aphche 2.2.15

最近经过搭建服务器,所以总结了yum安装的方法和安装中遇到的问题。在此谢谢@Vian提供的帮助

2016/01/05 11:19
399
0
雅黑PHP探针监测:PHP相关参数

报告内存泄漏(report_memleaks): √ 参考:PHP 运行时配置 名字 默认 可修改范围 更新日志 error_reporting NULL PHP_INI_ALL display_errors "1" PHP_INI_ALL display_startup_errors "...

2014/08/17 09:23
31
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部