-1

我正在moodle中创建一个网络服务,并希望将我的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 标准对象转换为 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 对象

4

2 回答 2

0

传递$AttendanceLog变量而不使用数据键,然后像这样json_encode转换 $lti_updatedjson_encode

json_encode($lti_updated); 

作为回报

return json_encode($lti_updated);
于 2022-01-26T14:04:26.230 回答
0

您正在使用 json_encode 对 add_attendance_lti 中的字符串进行 json 编码,生成的字符串将在add_attendance_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 到数组

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

于 2022-01-26T13:46:48.627 回答