<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          simdjson-phpJSON 解析器

          聯(lián)合創(chuàng)作 · 2023-09-21 20:09

          介紹

          simdjson_php是一個(gè)php擴(kuò)展,它綁定simdjson來實(shí)現(xiàn)快速解析,simdjson是一個(gè)高速的json解析器,它使用了大多數(shù)SIMD單一指令。simdjson介紹:https://github.com/lemire/simdjson

          環(huán)境依賴

          1. php7+

          2. 帶有AVX2的處理器(即,2013年發(fā)布的Haswell微體系結(jié)構(gòu)的Intel處理器和2017年發(fā)布的Zen微體系結(jié)構(gòu)的AMD處理器)
          3. 最近的C ++編譯器(例如,GNU GCC或LLVM CLANG或Visual Studio 2017),我們假設(shè)C ++ 17。GNU GCC 7或更高版本或LLVM的clang 6或更高版本
          4. 檢查操作系統(tǒng)/處理器是否支持它:

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

          使用簡(jiǎn)介

          1. 當(dāng)需要獲取一個(gè)較大json串中的某個(gè)key時(shí) 使用simdjson_key_value() 是比較合適的,不像json_decode() 把整個(gè)json串解析成數(shù)組,開辟不必要的內(nèi)存。

          2. 當(dāng)驗(yàn)證一個(gè)字符串是否為json時(shí)simdjson_isvaild() 是比較合適的,并且是非??斓?,同樣不需要通過json_decode()來驗(yàn)證。

          //檢查字符串是否為一個(gè)有效的json:
          $isValid = simdjson_isvalid($jsonString); //return bool
          
          //解析一個(gè)json字符串,返回?cái)?shù)組,對(duì)象,null,類似json_decode(),第三個(gè)參數(shù)為解析的深度
          $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" 是一個(gè)分割符. 它必須是一個(gè)控制字符. 它用來分割對(duì)象的key或數(shù)組的下標(biāo)
          //例如. "Image\tThumbnail\tUrl" 是正確. 'Image\tThumbnail\tUrl' 是錯(cuò)誤的
          
          
          //根據(jù)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解析后的資源,只解析一次,后續(xù)使用不再解析
          $resource = simdjson_resource($jsonString);
          //根據(jù)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是否存在,參數(shù)可以是一個(gè)json串也可以是一個(gè)json資源,返回true,false,null。當(dāng)?shù)谝粋€(gè)參數(shù)是字符串時(shí)返回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)

          性能對(duì)比(秒)

            測(cè)試腳本:

          • php benchmark/benchmark.php
          瀏覽 3
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本嗯黄色网址 | 五月婷丁香无码 | 日韩色情视频在线播放 | 人妻洗澡被强公日日澡 | 操逼社区 |