使用Python打开包含JSON数组的PHP文件

时间:2019-05-30 01:07:38

标签: php python arrays json

需要从何处开始的帮助。我继承了一个名为data.php的文件 由形状如下的数组组成:

<?php
error_reporting(0);
$items=array (
0 =>
array (
'name' => 'Ted',
'size' => 'Large',
'sleeve' => 'Short',
'color' => 'Red',
),

);
$unObiect->items = $items;
$json = json_encode($unObiect);
echo($json);
?>

文件中实际上有大约一百个数组。我正在尝试打开文件,搜索数组的元素 并替换一个值。并不关心替换部分,只是尝试打开文件并循环遍历数组。我不确定如何在Python中实际打开文件并将其循环。我尝试过

with open("data.php") as raw:
    for items in raw:
        print(items)

这将打开文件,但似乎正在按预期读取。如何将其打开并作为数组循环, 像

with open("data.php") as raw:
for items in raw['name']:
       print(items)

在这里我可以获取数组的元素而无需遍历每一行并查看该行是否包含“ name”,然后将该行拆分为“ =>”之后的值。我想基本上是想打开文件并循环 数组。我知道还有其他与此类似的帖子,但是我想我不确定我是否实际上是将php文件作为以php命名的文本文件或具有实际json数组的实际php文件打开。希望这有道理。

编辑: 从评论中,我建议从python执行php。使用以下代码,我能够做到这一点:

result = subprocess.run(
['php', 'data.php'],
stdout=subprocess.PIPE,
check=True
)
print(result.stdout)    

现在不知道如何处理result.stdout,以及如何遍历它。这将返回一个字节字符串。

2 个答案:

答案 0 :(得分:1)

Python 3.6.7 (default, Oct 22 2018, 11:32:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import os

In [2]: with os.popen('php data.php') as p:
   ...:     s = p.read()
   ...:

In [3]: s
Out[3]: '{"items":[{"name":"Ted","size":"Large","sleeve":"Short","color":"Red"}]}'

In [4]: import json

In [5]: r = json.loads(s)

In [6]: r
Out[6]:
{'items': [{'name': 'Ted',
   'size': 'Large',
   'sleeve': 'Short',
   'color': 'Red'}]}

答案 1 :(得分:0)

您可以使PHP返回上面的数组作为json而不是echo。然后,您可以使用请求库从python脚本向php脚本发出网络请求,如下所示:

r = requests.get('route_to_php_file')
    if r.status_code == 200:
        return r.json()

您可以了解有关python请求库的更多信息:https://2.python-requests.org/en/master/