简体   繁体   中英

Can't decode JSON string coming from Python in PHP

I have the following Python code:

array_to_return = dict()
response_json_object = json.loads(responsestring)

for section in response_json_object:
    if section["requestMethod"] == "getPlayerResources":
        array_to_return["resource_list"] = json.dumps(section["responseData"]["resources"])
        break
array_to_return["requests_duration"] = time.time() - requests_start_time
array_to_return["python_duration"] = time.time() - python_start_time

Which returns the following content into a PHP script:

{'resource_list': '{"aaa": 120, "bbb": 20, "ccc": 2138, "ddd": 8}', 'requests_duration': '7.30', 'python_duration': 41.0}

I'm then trying to decode this string and convert it into something usable in PHP. My code if the following:

$cmd = "$python $pyscript";
exec("$cmd", $output);

echo 'output: ';
var_dump($output[0]);

$json_output = json_decode($output[0], true);

echo 'json_output: ';
var_dump($json_output, json_last_error_msg());

$output[0] is a string but json_last_error_msg() returns Syntax Error

I'm well aware that my string is not a valid Json string, but how can I convert it properly (either in Python or in PHP)? I probably do something wrong in my Python script...

UPDATE 1:

I actually found out that responsestring is a valid JSON string (with double quotes) but json.loads switches the double to single quotes; thus response_json_object has single quotes.

If I comment out the line with json.loads , I get an error:

TypeError: 'int' object is not subscriptable

UPDATE 2:

I managed to get around it by removing the associative list in Python, not exactly what I was hoping for but this works for now...

array_to_return = json.dumps(section["responseData"]["resources"])
#No longer using the following
#array_to_return["requests_duration"] = time.time() - requests_start_time
#array_to_return["python_duration"] = time.time() - python_start_time

If a working solution with associative list is suggested, I will accept that one.

The ' character is not a legal character for JSON, it must be a " .

Your json should look like this.

{
    "resource_list": "{\"aaa\": 120, \"bbb\": 20, \"ccc\": 2138, \"ddd\": 8}",
    "requests_duration": "7.30",
    "python_duration": 41.0
}

instead of modifying the individual key, value pairs of array_to_return by json.dumps , you would json.dumps the whole dictionary.

array_to_return = dict()
response_json_object = json.loads(responsestring)

for section in response_json_object:
    if section["requestMethod"] == "getPlayerResources":
        
  
  
    array_to_return["resource_list"] = json.dumps(section["responseData"]["resources"]) 
          array_to_return["resource_list"] = 
        break
array_to_return["requests_duration"] = time.time() - requests_start_time
array_to_return["python_duration"] = time.time() - python_start_time

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM