创建作业时收到无效的 JSON 负载错误

问题描述 投票:0回答:3

我正在使用 Google Apps 脚本通过上传的文档为课堂创建作业。但是,有一个错误。

执行失败:收到无效的 JSON 负载。未知名字 “course_work.materials[0]”处的“share_mode”:找不到字段。无效的 收到 JSON 有效负载。未知名称“id”位于 “course_work.materials[0].drive_file”:找不到字段。无效的 JSON 收到有效负载。未知名称“标题”位于 “course_work.materials[0].drive_file”:找不到字段。 (第 2 行, 文件“TEST”)[总运行时间 0.061 秒]

这是我的代码。我知道错误在

materials
,但我不确定我做错了什么。

function myFunction() {
  var exec = Classroom.Courses.CourseWork.create({
    title: "Test File",
    state: "DRAFT",
    materials: [
      {
        driveFile: {id: "1ENk55RMtApIydyPFe0uyuhmu6nSV4", title: "Test File"},
        shareMode: "STUDENT_COPY"
      }
      ],
    workType: "ASSIGNMENT"
  }, "3896298178");
  Logger.log(exec);
}
google-apps-script google-classroom
3个回答
5
投票

找到问题的根源。我已经更新了您的代码以使其正常工作。

要求:

function myFunction() {
  var ClassSource =  {
    title: "Test File",
    state: "DRAFT",
    materials: [
      {
        driveFile:{
        driveFile: {
          id: "fileID", 
          title: "Sample Document"

        },
        shareMode: "STUDENT_COPY"
        }

      }
      ],
    workType: "ASSIGNMENT"
  };

  Classroom.Courses.CourseWork.create(ClassSource, COURSEID)
  //Logger.log(exec);
}

结果:

enter image description here

我们收到

Invalid JSON payload received.
,因为请求的格式错误。它比我想象的要复杂一点,这就是为什么我尝试使用 尝试这个 API 来查看请求格式,它确实帮助我解决了您的问题。

希望这有帮助。


2
投票

根据文档

Drivefile
属性
title
标记为只读。只需使用
id

https://developers.google.com/classroom/reference/rest/v1/DriveFile


2
投票

可以发送以下ajax请求来创建作业。下面的代码是为 Angular 编写的,但它可以轻松转换为 jQuery 脚本。您可以构建自己的 courseWork 对象,该对象作为 ajax 请求的“数据”传递,以查看完整的对象结构访问CourseWork API

    $http({
        url: 'https://classroom.googleapis.com/v1/courses/'+courseId+'/courseWork?access_token='+$scope.session.access_token,
        method: 'POST',   
        data:{
            "title": title,
            "description": description,
            "state": "PUBLISHED",
            "workType": "ASSIGNMENT",
            "submissionModificationMode": "MODIFIABLE_UNTIL_TURNED_IN",
            "associatedWithDeveloper": true
        }
    }).then(function(response){
        console.log(response);
        if(response.status==200){

        }
    }, function(response){
        console.log(response);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.