使用php检索json文件中对象的动态键

时间:2017-10-09 11:18:52

标签: php json regex

我有一个嵌套的巨大的27GB JSON文件,并且一些对象键(例如foo_12354,foo_12356,foo_13589是动态生成的。我想提取对象键并将其输出到列中,如下所示:

      `FOO ID`
     `foo_12354`
     `foo_12356`
     `foo_13589`

这是my json file。 由于文件的大小,我正在使用JSON pull parser for PHP 7,因此没有使用json_decode()将我的json文档转换为php数组。 我试图使用preg_match()但收到此错误消息: 警告:preg_match()要求参数2为字符串,对象在C:中给出:

我使用了stackoverflow中的一些帖子中使用的foreach()(例如PHP - print object key from json),但也没有结果。我已经能够从静态的对象中检索信息,但是我遇到了动态生成的对象的问题。我很乐意帮忙。这是我的代码:

    <?php
    require_once 'C:/xampp/htdocs/vendor/autoload.php';
    use \pcrov\JsonReader\JsonReader;
    ini_set("max_execution_time", 0);
    $reader = new JsonReader();
    $reader->open("myjsonfile.json");
    $fo = fopen("mycsv.csv", "w" );
    fputs($fo, "companyID1".PHP_EOL);
    while($reader->read()) {
    preg_match('/^foo_/', $reader, $companyID_matches);
    $companyID_match = $companyID_matches[0];   
    if ($reader->read("$companyID_match")){
    $companyID1 = null;
    $companyID = $reader->key();
    }   

 fputs($fo,  $companyID.$uhcName.PHP_EOL);
 }
 $reader->close();

1 个答案:

答案 0 :(得分:0)

<?php
    require_once 'C:/xampp/htdocs/vendor/autoload.php';
    use \pcrov\JsonReader\JsonReader;
    ini_set("max_execution_time", 0);
    $reader = new JsonReader();
    $reader->open("myjsonfile.json");
    $fo = fopen("mycsv.csv", "w" );
    fputs($fo, "companyID1".PHP_EOL);
    while($reader->read()) {
    if (preg_match('/^foo_/', $reader->name())){
        $companyID = $reader->name();
        fputs($fo,  $companyID.PHP_EOL);
    }   
 }
 $reader->close();

这里我简化了你的代码,删除了无用的变量(对不起,如果它们很有用,但它们没有在任何地方使用/定义。我做的是循环读取,它将为我们提供每个键值检查密钥是否与模式匹配,并将其放入文件中。