当前位置: 首页 > 后端技术 > PHP

simdjson_php高速解析json

时间:2023-03-30 01:39:36 PHP

介绍simdjson_php(https://github.com/crazyxman/...,绑定simdjson实现快速解析,simdjson是一个高速json解析器,它使用大部分SIMD单指令.simdjson介绍:https://github.com/lemire/sim...环境依赖于php7+处理器搭配AVX2(即2013年发布的Haswell微架构的Intel处理器和2017年发布的Zen微架构架构的AMD处理器),大部分cpu的都支持通过最近的C++编译器(例如,GNUGCC或LLVMCLANG或VisualStudio2017),我们假设C++17。GNUGCC7或更高版本或LLVM的clang6或更高版本检查操作系统/处理器是否支持它:OSX:sysctl-a|grepmachdep.cpu.leaf7_featuresLinux:grepavx2/proc/cpuinfo使用介绍当需要获取较大的json字符串时对某个key使用simdjson_key_value()比较合适,不像json_decode()是解析将整个json字符串放入一个数组中并打开不必要的内存。当然,它的性能略逊于hashlookup。当验证一个字符串是否为json时,simdjson_isvaild()比较合适,而且速度很快,不需要json_decode()验证。//检查字符串是否是有效的json:$isValid=simdjson_isvalid($jsonString);//returnbool//解析一个json字符串,返回数组,对象,null,类似json_decode(),第三个参数为Parseddepth$parsedJSON=simdjson_decode($jsonString,true,512);//返回数组|对象|空。"null"字符串不是标准的json/*{"Image":{"Width":800,"Height":600,"Title":"Viewfrom15thFloor","Thumbnail":{"Url":"http://www.example.com/image/481989943","Height":125,"Width":100},"Animated":false,"IDs":[116,943,234,38793,{"p":"30"}]}}*///注意。"\t"是分隔符。它必须是一个控制字符。用于拆分对象的键或者数组的下标//例如。“Image\tThumbnail\tUrl”是正确的。'Image\tThumbnail\tUrl'iswrong//根据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表示解析失败Image\tIDs\t1");var_dump($res)//bool(true)性能测试(秒)filenamejson_decodesimdjson_decodesimdjson_isvalidapache_builds.json0.003073000.002252000.00018100canada.json0.139550000.027739000.00358300citm_catalog.json0.030309000.013340000.00117000github_events.json0.002941000.000904000.00008500gsoc-2018.json0.042925000.011120000.00186700instruments.json0.005097000.002318000.00017500marine_ik.json0.098336000.044175000.00463400mesh.json0.018692000.007226000.00114800mesh.pretty.json0.035762000.007381000.00163400numbers.json0.002636000.000699000.00018200random.json0.0171350000生命值