我正在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);