Accepts non-strict "JSON": - {this: ["is": {where: "sparta"}]} # quoteless keys are allowed - this: ["is": {where: "sparta"}] # enclosing braces can be omitted Lints the JSON using the JsonParser.
Ejemplo n.º 1
0
 public function parse($json)
 {
     $expr = $this->decoder->decode($json);
     return $this->processExpr($expr);
 }
Ejemplo n.º 2
0
 private static function loadConfig()
 {
     global $argv;
     $configPaths = [];
     $extensions = [];
     $configOverride = [];
     foreach ($argv as $arg) {
         if ($configFile = self::parseOption($arg, 'config')) {
             if (!file_exists($configFile)) {
                 echo sprintf('Config file "%s" does not exist', $configFile) . PHP_EOL;
                 exit(1);
             }
             $configPaths = [$configFile];
         }
         if ($value = self::parseOption($arg, 'bootstrap', 'b')) {
             $configOverride['bootstrap'] = self::getBootstrapPath(getcwd(), $value);
         }
         if ($value = self::parseOption($arg, 'extension')) {
             $extensions[] = $value;
         }
         if ($value = self::parseOption($arg, 'php-binary')) {
             $configOverride['php_binary'] = $value;
         }
         if ($value = self::parseOption($arg, 'php-wrapper')) {
             $configOverride['php_wrapper'] = $value;
         }
         if ($value = self::parseOption($arg, 'php-config')) {
             $jsonParser = new JsonDecoder();
             $value = $jsonParser->decode($value);
             $configOverride['php_config'] = $value;
         }
     }
     if (empty($configPaths)) {
         $configPaths = [getcwd() . '/phpbench.json', getcwd() . '/phpbench.json.dist'];
     }
     $config = ['extensions' => [], 'bootstrap' => null];
     foreach ($configPaths as $configPath) {
         if (!file_exists($configPath)) {
             continue;
         }
         $configRaw = file_get_contents($configPath);
         try {
             $parser = new JsonParser();
             $parser->parse($configRaw);
         } catch (ParsingException $e) {
             echo 'Error parsing config file:' . PHP_EOL . PHP_EOL;
             echo $e->getMessage();
             exit(1);
         }
         $config = array_merge($config, json_decode($configRaw, true));
         $config['config_path'] = $configPath;
         if ($config['bootstrap']) {
             $config['bootstrap'] = self::getBootstrapPath(dirname($configPath), $config['bootstrap']);
         }
         break;
     }
     $config = array_merge($config, $configOverride);
     // add any manually specified extensions
     foreach ($extensions as $extension) {
         $config['extensions'][] = $extension;
     }
     return $config;
 }