Вызов функции синтаксического анализа в Swift не удается - PullRequest
0 голосов
/ 17 июня 2019

Я работаю над приложением доставки еды, которое использует parse в качестве своего бэкэнда.Я сталкиваюсь с проблемой при вызове API placeOrder через

PFCloud.callFunction(inBackground: PlaceOrder, withParameters: params) { (data, err) in}

Пожалуйста, посмотрите на JSON, который мне нужно опубликовать ниже.

{
 "source": "card_1EVYuOEynlyM6L4SHgBMJYRQ",
 "userId": "YjSZYSXEp7",
   "data": {
            "menuItems": [{
                            "id": "QSYa2JDcIm",
                         "title": "Rice With Tibss(Beef)",
                     "menuTitle": "Rice With Tibss",
                   "submenuItem": [{
                                    "id": "zaOo6G4KSV",
                                  "name": "Beef",
                                 "price": 12,
                                  "desc": "Fillings?"
                                   }],
                         "price": 24,
                           "qty": 1,
                       "storeId": "yqBCDmzaDP",
                     "storeName": "Ibex Ethiopian Cusine and Bar",
                     "orderType": "takeout",
                      "taxState": 0.0925,
                     "storeInfo": {
                                   "cart_storeId": "yqBCDmzaDP",
                                 "cart_storeName": "Ibex Ethiopian Cusine and Bar",
                                "cart_storeImage": "https://res.cloudinary.com/http-get-tolofood-com/image/upload/c_scale,h_199,q_auto,w_270/v1461575640/Ibex_lopx38.jpg",
                              "cart_storeCuisine": "Ethiopian",
                          "cart_storeDescription": "We always serve a quality food. We always serve a quality food. We always serve a quality food. We always serve a quality food.",
                               "cart_storeRating": 3.33,
                             "cart_storeDelivery": false,
                                        "takeout": true,
                                        "address": "12255 Greenville Ave,Dallas, TX 75243",
                                       "slugname": "TX_DAL_ibex_ethiopian_cuisine_and_bar",
                              "multiple_location": false,
                          "cart_storeDeliveryFee": 15,
                               "cart_storeServes": "Lunch,Dinner",
                                           "busy": false,
                              "cart_storeSeoSlug": "ibex-ethiopian-cusine-and-bar"
                                  },
                       "enable": true,
          "voice_read_mi_label": "fbgcb",
         "voice_read_mi_option": false,
                 "menuTypeName": "Standard"
                            }],
   "lastOrderType": "takeout",
   "searchedAddress": "takeout",
   "timeData": {
                "day": "06-05-2019",
               "time": "12:55 am",
                 "tz": "America/Los_Angeles"
               }
            },
 "unavailable_option": "restaurant_recommendation"
  }

Иниже приведен код Swift, который я использовал для его передачи.

let storeInfo: Dictionary = [CartStoreId: self.cartStoreId, CartStoreName: self.cartRestaurantName, CartStoreImage: self.cartStoreImage, CartStoreCuisine: self.cartStoreCuisine, CartStoreDescription: self.cartStoreDescription, CartStoreRating: self.cartStoreRating, CartStoreDelivery: self.cartStoreDelivery, Takeout: self.takeOut, Address: self.address, Slugname: self.slugName, MultipleLocation: self.multipleLocation, CartStoreDeliveryFee: self.cartStoreDelivery, CartStoreServes: self.cartStoreServes, Busy: self.busy, CartStoreSeoSlug: self.cartStoreSeoSlug] as Dictionary
let subMenuItem = ["id": "zaOo6G4KSV", "name": "Beef", "price": 12, "desc": "Fillings?", "voice_read_submi_label":"bf", "voice_read_submi_option":false, "disabled": false] as [String: Any]
let ordersDictionary = [
            "id" : "1234",
            "title" : "Test",
            "menuTitle" : "MenuName",
            "price" : 23,
            "qty" : 2,
            "storeId" : 23,
            "orderType" : "standard",
            "taxState" : 0.22,
            "enable" : true,
            "menuTypeName" : "Type Name",
            "voice_read_mi_label":"fdfs",
            "voice_read_mi_option":"false",
            "submenuitem": subMenuItem,
            "storeInfo": storeInfo
            ] as Dictionary
let timeData = ["day" : 17-06-2019, "time": "11:00 AM", "tz": "America/Los_Angeles"] as Dictionary
let data = ["menuItems": ordersDictionary, "lastOrderType": "takeout", "searchedAddress": "takeout", "timeData" : timeData] as Dictionary
let params = [UserId: self.userId, "source":"card_1EVYuOEynlyM6L4SHgBMJYRQ", "data": data, "unavailable_option":"restaurant_recommendation","_ApplicationId":"6EuadToYoFGJhI1sX8XnuFBz9tp9l3yH6HxzzXZO", "_JavaScriptKey":"rQkALu9saFtF2oq9yCibyw6mEcs3PVqct3uuP6vg", "_ClientVersion":"js1.6.14", "_InstallationId":"444ec64d-5fcc-7b8e-596e-6be627892c2a",
        "_SessionToken":"r:c966376120c8eca77aa63c29d5bebe1a"] as Dictionary

После того, как все это сделано, я вызываю функцию разбора, как показано ниже.

PFCloud.callFunction(inBackground: PlaceOrder, withParameters: params) { (data, err) in
        if err != nil {
            print(err!)
        } else {
            print(data!)
        }
    }

Но это дает мне ошибкуЧерез несколько секунд, сказав

"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.}"

, я искал в Интернете ошибку и внес соответствующие исправления, но все равно безуспешно.Пожалуйста, помогите мне, ребята.

1 Ответ

0 голосов
/ 18 июня 2019

Я заметил, что ваши параметры var несовместимы с отправленным вами JSON, есть еще поля, а также пропущенные поля. Кроме того, menuItems и submenuItem являются массивом в вашем JSON и объектом в вашем коде. Вероятно, происходит сбой функции облачного кода, и поэтому вы не получаете обратно верный JSON. Попробуйте следующее и проверьте, работает ли оно. В случае, если это работает, просто замените значения вашими переменными.

let params = [
    "source": "card_1EVYuOEynlyM6L4SHgBMJYRQ",
    "userId": "YjSZYSXEp7",
    "data": [
        "menuItems": [[
            "id": "QSYa2JDcIm",
            "title": "Rice With Tibss(Beef)",
            "menuTitle": "Rice With Tibss",
            "submenuItem": [[
                "id": "zaOo6G4KSV",
                "name": "Beef",
                "price": 12,
                "desc": "Fillings?"
            ]],
            "price": 24,
            "qty": 1,
            "storeId": "yqBCDmzaDP",
            "storeName": "Ibex Ethiopian Cusine and Bar",
            "orderType": "takeout",
            "taxState": 0.0925,
            "storeInfo": [
                "cart_storeId": "yqBCDmzaDP",
                "cart_storeName": "Ibex Ethiopian Cusine and Bar",
                "cart_storeImage": "https://res.cloudinary.com/http-get-tolofood-com/image/upload/c_scale,h_199,q_auto,w_270/v1461575640/Ibex_lopx38.jpg",
                "cart_storeCuisine": "Ethiopian",
                "cart_storeDescription": "We always serve a quality food. We always serve a quality food. We always serve a quality food. We always serve a quality food.",
                "cart_storeRating": 3.33,
                "cart_storeDelivery": false,
                "takeout": true,
                "address": "12255 Greenville Ave,Dallas, TX 75243",
                "slugname": "TX_DAL_ibex_ethiopian_cuisine_and_bar",
                "multiple_location": false,
                "cart_storeDeliveryFee": 15,
                "cart_storeServes": "Lunch,Dinner",
                "busy": false,
                "cart_storeSeoSlug": "ibex-ethiopian-cusine-and-bar"
            ],
            "enable": true,
            "voice_read_mi_label": "fbgcb",
            "voice_read_mi_option": false,
            "menuTypeName": "Standard"
        ]],
        "lastOrderType": "takeout",
        "searchedAddress": "takeout",
        "timeData": [
            "day": "06-05-2019",
            "time": "12:55 am",
            "tz": "America/Los_Angeles"
        ]
    ],
    "unavailable_option": "restaurant_recommendation"
]
...