如何从php向python发送URI数组并在那里打印

时间:2018-12-11 06:43:04

标签: php python arrays

我正在尝试将URI数组从我的php发送到我的python scraper。该数组包含要抓取的链接。

我从here获得了示例,并且可以很好地发送整数数组,但是当我尝试使用URI填充数组时,出现了错误。

php片段:

$array = ["https://www.google.com/","https://www.google.com/","https://www.google.com/"];
//$array = [1,2,3]; // This is worked fine
$resultScript= system('python C:\xampp\htdocs\selenium\dummy.py '   .escapeshellarg(json_encode($array)));
$resultData = json_decode($resultScript, true);
var_dump($resultData);

python:

import sys
import json
def jsontoarray(json_data):
    data = json.loads(json_data)
    print(json.dumps(data))
jsontoarray(sys.argv[1])
print(data)

IDE的结果

Traceback (most recent call last):
  File "C:\xampp\htdocs\selenium\dummy.py", line 8, in <module>
    jsontoarray(sys.argv[1])
  File "C:\xampp\htdocs\selenium\dummy.py", line 6, in jsontoarray
    data = json.loads(json_data)
  File "C:\Users\PC2\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\Users\PC2\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\PC2\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 3 (char 2)
NULL

Process finished with exit code 0

1 个答案:

答案 0 :(得分:0)

here所述,出现错误的原因如下:

  

json.decoder.JSONDecodeError:预期值:第1行第3列(字符2)

可以是:

  • 非JSON引用
  • XML / HTML输出(即以<开头的字符串)或
  • 不兼容的字符编码

因此,根据您所拥有的内容,我敢打赌存在编码问题。

  • 查看您的PHP文件,并确保它是UTF-8编码的。
  • 检查Python脚本文件的编码,如果您在以下文件行的开头添加以实施正确的编码,那将是很好的选择。

    # -*- coding: utf-8 -*-

因此您的python文件将如下所示:

# -*- coding: utf-8 -*-
import sys
import json
def jsontoarray(json_data):
    data = json.loads(json_data)
    print(json.dumps(data))
jsontoarray(sys.argv[1])

除此之外,您还可以打印sys.argv[1]的类型:

print(type(sys.argv[1]))

您应该获得stringbytes(对于UTF-8)字符串。如果您还有其他东西,可以将其转换为如下字符串:

str(sys.argv[1])