如何在moodle Web服务中以JSON形式返回数据



我正在moodle中创建一个Web服务,并希望将我的std对象作为JSON、返回

public static function add_attendance_lti($attendanceObject)
{
......
$lti_updated = [
'id' => $insert_new_attendance,
'code' => $statusCode,
'message' => $message,
'data' => json_encode($AttendanceLog)
];
return $lti_updated;
}
public static function add_attendance_lti_returns()
{
return new external_single_structure(
array(
'id' => new external_value(PARAM_RAW, 'New Attendance id'),
'code' => new external_value(PARAM_INT, 'status code of response'),
'message' => new external_value(PARAM_TEXT, 'message returned'),
'data' => new external_value(PARAM_RAW, 'Return Value')
)
);
}

在这里,我使用JSON_encode((将$AttendanceLog std对象转换为JSON,但这会返回以下数据,

{
"id": null,
"code": 200,
"message": "Attendance Record already exists",
"data": "{"sessionid":"18","timetaken":1643335205,"studentid":"4","takenby":"3","statusset":"49,51,52,50","statusid":"52"}"
}

我如何才能返回正常的";数据";JSON对象,不带";

您正在用json_encode将add_attendance_lti中的字符串编码为json,生成的字符串将在add_attedance_lti_returns中将转义。因此,这种大幅削减的编码。

您可以尝试将std对象转换为add_attendance_lti中的数组

public static function add_attendance_lti($attendanceObject)
{
......
$lti_updated = [
'id' => $insert_new_attendance,
'code' => $statusCode,
'message' => $message,
'data' => json_decode(json_encode($AttendanceLog), true)
];
return $lti_updated;
}

(请参阅php-stdClass-to-array(

这样,该方法将返回一个数组,并返回键"的json值数据";另一端将是json,而不是转义字符串。

在数据密钥中不使用json_encode的情况下传递$AttendanceLog变量,然后像一样用json_encode转换$lti_updated

json_encode($lti_updated); 

作为回报,就像

return json_encode($lti_updated);

最新更新