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