«Неверный формат JSON» - PullRequest
0 голосов
/ 08 мая 2019

Я делаю запрос POST с необходимыми параметрами body , проверка этого запроса POST в POSTMAN дает мне правильный ответ, но когда я передаю те же параметры тела из своего кода, яошибка ниже -:

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.

Код -:

     func submitStudentAttendance(url:String,id:String,SessionID: Int,SchoolID:Int,BatchID:Int,ClassID:Int,SectionID:Int,Medium:Int,Date:String,accessToken:String) {
            let params : [String:Any] = [
                "$id":"1",
                "SchoolID":1,
                "SessionID":42,
                "BatchID":106,
                "ClassID":634,
                "SectionID":1246,
                "Medium":"English",
                "Date":"0001-01-01T00:00:00",
                "CreatedBy":118,
                "CreatedOn":"2019-04-14T17:02:34",
                "studentList":"",
                "AttendenceData":"[{\"ID\":0,\"SchoolID\":null,\"SessionID\":null,\"ClassID\":634,\"SectionID\":1246,\"StudID\":\"DSM00399\",\"SubjectID\":null,\"Date\":\"0001-01-01T00:00:00\",\"Attendence\":\"P\",\"CreatedOn\":null,\"CreatedBy\":0,\"IsActive\":null,\"Remarks\":\"rem16\",\"timeID\":null,\"AtndType\":null,\"BatchID\":null,\"Medium\":null}]"
]

            let urlRequest = NSURL(string: url)
            var request = URLRequest(url: urlRequest! as URL)
            let tokenString = "Bearer " + accessToken
            request.httpMethod = "POST"
            request.setValue(tokenString, forHTTPHeaderField: "Authorization")

            request.setValue("application/json", forHTTPHeaderField: "Content-Type")
            let data = try! JSONSerialization.data(withJSONObject: params, options: [])

            let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
            if let json = json {
                print(json)
            }
            request.httpBody = json!.data(using: String.Encoding.utf8.rawValue);

            let alamoRequest = Alamofire.request(request as URLRequestConvertible)
            alamoRequest.responseString {

                response in
                switch response.result {
                case .success:
                    if response.data != nil {
                        do{
                            let json =  try JSON(data: response.data!)
                            print(json)
                        }catch{
                            print(error)
                        }
                    }
                    break
                case .failure(let error):
                    print(error)
                }
            }
        }

Корпусная часть точно такая же, как в POSTMAN, но все еще не работает.Кто-нибудь может дать мне знать, что здесь происходит не так?Это проблема со стороны сервера, или я посылаю запрос тела в неправильном формате?

ОТЧЁТ ПОЧТЫ -:

enter image description here

1 Ответ

1 голос
/ 08 мая 2019

Когда параметры, объявленные в вашем вопросе, преобразуются в JSON, это выглядит следующим образом. Здесь значение AttendanceData не преобразуется как правильная структура JSON. Это похоже на строку.

JSON от вашего параметра:

{
  "Date": "0001-01-01T00:00:00",
  "CreatedBy": 118,
  "$id": "1",
  "BatchID": 106,
  "ClassID": 634,
  "Medium": "English",
  "studentList": "",
  "SchoolID": 1,
  "SectionID": 1246,
  "AttendenceData": "[{\"ID\":0,\"SchoolID\":null,\"SessionID\":null,\"ClassID\":634,\"SectionID\":1246,\"StudID\":\"DSM00399\",\"SubjectID\":null,\"Date\":\"0001-01-01T00:00:00\",\"Attendence\":\"P\",\"CreatedOn\":null,\"CreatedBy\":0,\"IsActive\":null,\"Remarks\":\"rem16\",\"timeID\":null,\"AtndType\":null,\"BatchID\":null,\"Medium\":null}]",
  "CreatedOn": "2019-04-14T17:02:34",
  "SessionID": 42
}

Но если вы объявите параметр, как показано ниже, и преобразуете его в JSON, значение AttendanceData должным образом преобразуется в JSON.

let params : [String:Any] = [
    "$id":"1",
    "SchoolID":1,
    "SessionID":42,
    "BatchID":106,
    "ClassID":634,
    "SectionID":1246,
    "Medium":"English",
    "Date":"0001-01-01T00:00:00",
    "CreatedBy":118,
    "CreatedOn":"2019-04-14T17:02:34",
    "studentList":"",
    "AttendenceData":[
        "ID":0,"SchoolID":"null","SessionID":"null","ClassID":634,"SectionID":1246,"StudID":"DSM00399","SubjectID":"null","Date":"0001-01-01T00:00:00","Attendence":"P","CreatedOn":"null","CreatedBy":0,"IsActive":"null","Remarks":"rem16","timeID":"null","AtndType":"null","BatchID":"null","Medium":"null"
    ]
]

1012 * JSON *

{
  "$id": "1",
  "BatchID": 106,
  "CreatedBy": 118,
  "ClassID": 634,
  "studentList": "",
  "SectionID": 1246,
  "SessionID": 42,
  "AttendenceData": {
    "IsActive": "null",
    "AtndType": "null",
    "SectionID": 1246,
    "timeID": "null",
    "SessionID": "null",
    "Attendence": "P",
    "Date": "0001-01-01T00:00:00",
    "Remarks": "rem16",
    "Medium": "null",
    "SchoolID": "null",
    "BatchID": "null",
    "ClassID": 634,
    "StudID": "DSM00399",
    "SubjectID": "null",
    "CreatedBy": 0,
    "ID": 0,
    "CreatedOn": "null"
  },
  "Date": "0001-01-01T00:00:00",
  "CreatedOn": "2019-04-14T17:02:34",
  "Medium": "English",
  "SchoolID": 1
}

Надеюсь, это также решит вашу проблему.

...