Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将JSON字符串转换为无JSON_解码的数组_Php_Arrays_Json_Preg Match All_Preg Split - Fatal编程技术网

Php 将JSON字符串转换为无JSON_解码的数组

Php 将JSON字符串转换为无JSON_解码的数组,php,arrays,json,preg-match-all,preg-split,Php,Arrays,Json,Preg Match All,Preg Split,我在共享服务器上使用PHP通过API访问外部站点,该API返回包含2级数据的JSON(1级:执行者&2级:执行者内部的类别数组)。我想在不使用json_解码函数的情况下将其转换为多维关联数组(它使用了太多内存!!!) JSON数据示例: [ { "performerId": 99999, "name": " Any performer name", "category": { "categoryId": 99, "name": "Some

我在共享服务器上使用PHP通过API访问外部站点,该API返回包含2级数据的JSON(1级:执行者&2级:执行者内部的类别数组)。我想在不使用json_解码函数的情况下将其转换为多维关联数组(它使用了太多内存!!!)

JSON数据示例:

[
{
    "performerId": 99999,
    "name": " Any performer name",
    "category": {
        "categoryId": 99,
        "name": "Some category name",
        "eventType": "Category Event"
    },
    "eventType": "Performer Event",
    "url": "http://www.novalidsite.com/something/performerspage.html",
    "priority": 0
},
{
    "performerId": 88888,
    "name": " Second performer name",
    "category": {
        "categoryId": 88,
        "name": "Second Category name",
        "eventType": "Category Event 2"
    },
    "eventType": "Performer Event 2",
    "url": "http://www.novalidsite.com/somethingelse/performerspage2.html",
    "priority": 7
}
]
我尝试使用substr并去掉“[”和“]”

然后执行调用:

preg_match_all('/\{([^}]+)\}/', $input, $matches);
这为我提供了每行的字符串,但在类别数据的尾部“}”之后截断

我如何使用preg_split、preg_match_all等来返回整行数据作为数组,而不是对整个json字符串进行json_decode之类的繁重调用

一旦正确识别了每一行的数组,我就可以对该字符串执行json_解码,而不会使共享服务器上的内存负担过重


对于那些希望了解导致错误的json_解码用法的详细信息的人:

$aryPerformersfile[ ] = file_get_contents('https://subdomain.domain.com/dir/getresults?id=1234');
$aryPerformers = $aryPerformersfile[0];
unset($aryPerformersfile);
$mytmpvar = json_decode($aryPerformers);
print_r($mytmpvar);
exit;

这里有两个选项,都不包括编写自己的解码器;不要用不必要的变通方法使解决方案过于复杂

1) 减小正在解码的json的大小,或 2) 增加服务器上允许的内存

第一个选项需要访问正在创建的json。这可能是也可能不是,取决于您是否是最初创建json的人。最简单的方法是
unset()
任何无用的数据。例如,可能有一些调试信息您不需要,所以您可以执行
unset($json_array['debug'])在无用的数据上。


第二个选项要求您能够访问服务器上的php.ini文件。您需要找到类似于
memory\u limit=128M
的行,并将
128M
部分放大。尝试将此值增加一倍,使文件中已有的值增加一倍(因此在本例中为256M)。但这可能无法解决您的问题,因为大型json数据仍然可能是问题的核心;这只为效率低下的代码提供了一个解决办法。

这里有两个选项,都不包括编写自己的解码器;不要用不必要的变通方法使解决方案过于复杂

1) 减小正在解码的json的大小,或 2) 增加服务器上允许的内存

第一个选项需要访问正在创建的json。这可能是也可能不是,取决于您是否是最初创建json的人。最简单的方法是
unset()
任何无用的数据。例如,可能有一些调试信息您不需要,所以您可以执行
unset($json_array['debug'])在无用的数据上。


第二个选项要求您能够访问服务器上的php.ini文件。您需要找到类似于
memory\u limit=128M
的行,并将
128M
部分放大。尝试将此值增加一倍,使文件中已有的值增加一倍(因此在本例中为256M)。但这可能无法解决您的问题,因为大型json数据仍然可能是问题的核心;这只为效率低下的代码提供了一个解决办法。

这里有两个选项,都不包括编写自己的解码器;不要用不必要的变通方法使解决方案过于复杂

1) 减小正在解码的json的大小,或 2) 增加服务器上允许的内存

第一个选项需要访问正在创建的json。这可能是也可能不是,取决于您是否是最初创建json的人。最简单的方法是
unset()
任何无用的数据。例如,可能有一些调试信息您不需要,所以您可以执行
unset($json_array['debug'])在无用的数据上。


第二个选项要求您能够访问服务器上的php.ini文件。您需要找到类似于
memory\u limit=128M
的行,并将
128M
部分放大。尝试将此值增加一倍,使文件中已有的值增加一倍(因此在本例中为256M)。但这可能无法解决您的问题,因为大型json数据仍然可能是问题的核心;这只为效率低下的代码提供了一个解决办法。

这里有两个选项,都不包括编写自己的解码器;不要用不必要的变通方法使解决方案过于复杂

1) 减小正在解码的json的大小,或 2) 增加服务器上允许的内存

第一个选项需要访问正在创建的json。这可能是也可能不是,取决于您是否是最初创建json的人。最简单的方法是
unset()
任何无用的数据。例如,可能有一些调试信息您不需要,所以您可以执行
unset($json_array['debug'])在无用的数据上。


第二个选项要求您能够访问服务器上的php.ini文件。您需要找到类似于
memory\u limit=128M
的行,并将
128M
部分放大。尝试将此值增加一倍,使文件中已有的值增加一倍(因此在本例中为256M)。但这可能无法解决您的问题,因为大型json数据仍然可能是问题的核心;这只能解决低效代码的问题。

如果内存有限,可以将数据作为流读取并一次解析JSON,而不是一次解析所有内容

getresults.json:

[
    {
        "performerId": 99999,
        "name": " Any performer name",
        "category": {
            "categoryId": 99,
            "name": "Some category name",
            "eventType": "Category Event"
        },
        "eventType": "Performer Event",
        "url": "http://www.novalidsite.com/something/performerspage.html",
        "priority": 0
    },
    {
        "performerId": 88888,
        "name": " Second performer name",
        "category": {
            "categoryId": 88,
            "name": "Second Category name",
            "eventType": "Category Event 2"
        },
        "eventType": "Performer Event 2",
        "url": "http://www.novalidsite.com/somethingelse/performerspage2.html",
        "priority": 7
    }
]
PHP:

输出:

Performer with ID 99999 has category Some category name
Performer with ID 88888 has category Second Category name

考虑到字符串值本身可能包括
{
}
字符等,使用缓冲区进行更快的读取当然可以改进此代码。

如果内存有限,可以
Performer with ID 99999 has category Some category name
Performer with ID 88888 has category Second Category name