swift - 如何将此 Json 正文转换为 alamofire 参数格式?

标签 swift xcode dictionary

我正在执行 alamofire 请求并将正文参数转换为 swift 字典,但我认为我正在以错误的格式转换它。谁能建议我将此 json 正文转换为 swift 参数的正确格式是什么?

我在 postman 中发送的实际正文给出了正确的回复:-

{
    "events": [
        {
            "distance_to_next_route_change": "null",
            "accelerationX": "0.10055954",
            "accelerationY": "-0.0047885496",
            "accelerationZ": "-0.0047885496",
            "drivingState": "DRIVING",
            "latitude": "12.921918",
            "longitude": "77.658917",
            "next_route_coordinate": "null",
            "speed": "33",
            "timeStamp": "1560319632021",
            "tripID": "7090291482_1560319518940",
            "maneuver_list": [],
            "tripState": "null",
            "eventId": "event_tacticurv_id"
        }
    ]
}

我在 alamofire 参数中发送的内容:-

let params = [
            "events": [
                [
                    "distance_to_next_route_change": "null",
                    "accelerationX": "0.10055954",
                    "accelerationY": "-0.0047885496",
                    "accelerationZ": "-0.0047885496",
                    "drivingState": "DRIVING",
                    "latitude": "12.921918",
                    "longitude": "77.658917",
                    "next_route_coordinate": "null",
                    "speed": "33",
                    "timeStamp": "1560319632021",
                    "tripID": "7090291482_1560319518940",
                    "maneuver_list": [],
                    "tripState": "null",
                    "eventId": "event_tacticurv_id"
                ],
                [
                    "distance_to_next_route_change": "null",
                    "accelerationX": "0.10055954",
                    "accelerationY": "-0.0047885496",
                    "accelerationZ": "-0.0047885496",
                    "drivingState": "DRIVING",
                    "latitude": "12.921918",
                    "longitude": "77.658917",
                    "next_route_coordinate": "null",
                    "speed": "33",
                    "timeStamp": "1560319632021",
                    "tripID": "7090291482_1560319518940",
                    "maneuver_list": [],
                    "tripState": "null",
                    "eventId": "event_tacticurv_id"
                ]
            ]
        ]

预期回复:

{
    "code": "OK",
    "message": "Successfully processed your request",
    "statusCode": 200
}

响应即将到来:

{
    "code": "INTERNAL_SERVER_ERROR",
    "message": "Internal server error occured. Please try again later.",
    "statusCode": 500
}

完整代码如下:-

func testApi() {

    let defaultManager: Alamofire.SessionManager = {
        let serverTrustPolicies: [String: ServerTrustPolicy] = [
            "asia-east2-sandboxkruzr.cloudfunctions.net": .pinCertificates(
                certificates: ServerTrustPolicy.certificates(),
                validateCertificateChain: true,
                validateHost: true
            ),
            "35.220.245.158": .disableEvaluation
        ]

        let configuration = URLSessionConfiguration.default
        configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders

        return Alamofire.SessionManager(
            configuration: configuration,
            serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
        )
    }()

    let params = [
        "events": [
            [
                "distance_to_next_route_change": "null",
                "accelerationX": "0.10055954",
                "accelerationY": "-0.0047885496",
                "accelerationZ": "-0.0047885496",
                "drivingState": "DRIVING",
                "latitude": "12.921918",
                "longitude": "77.658917",
                "next_route_coordinate": "null",
                "speed": "33",
                "timeStamp": "1560319632021",
                "tripID": "7090291482_1560319518940",
                "maneuver_list": [],
                "tripState": "null",
                "eventId": "event_tacticurv_id"
            ],
            [
                "distance_to_next_route_change": "null",
                "accelerationX": "0.10055954",
                "accelerationY": "-0.0047885496",
                "accelerationZ": "-0.0047885496",
                "drivingState": "DRIVING",
                "latitude": "12.921918",
                "longitude": "77.658917",
                "next_route_coordinate": "null",
                "speed": "33",
                "timeStamp": "1560319632021",
                "tripID": "7090291482_1560319518940",
                "maneuver_list": [],
                "tripState": "null",
                "eventId": "event_tacticurv_id"
            ]
        ]
    ]

    let header = [
        "Content-Type": "application/json",
        "Authorization": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJjMGFhYzBkYy1lZGI5LTQzMzEtYWVjNC0wYmU5NTY3MDQ5M2UifQ.kbKSk5FEu2cWceb9MmZH8wefpyObyjmRM6PRDbJkUW0"
    ]
    defaultManager.request("http://35.220.245.158/gateway/events", method: .post, parameters: params, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in
        let _ = defaultManager
        print("api response is")
        print(response.result.value)
    }
}

最佳答案

您的事件中的括号不正确,它们需要是 { } 才能代表单个事件类,而不是代表数组的 [ ]。它们应该看起来像这样。

let params = [
            "events": [
                {
                    "distance_to_next_route_change": "null",
                    "accelerationX": "0.10055954",
                    "accelerationY": "-0.0047885496",
                    "accelerationZ": "-0.0047885496",
                    "drivingState": "DRIVING",
                    "latitude": "12.921918",
                    "longitude": "77.658917",
                    "next_route_coordinate": "null",
                    "speed": "33",
                    "timeStamp": "1560319632021",
                    "tripID": "7090291482_1560319518940",
                    "maneuver_list": [],
                    "tripState": "null",
                    "eventId": "event_tacticurv_id"
                },
                {
                    "distance_to_next_route_change": "null",
                    "accelerationX": "0.10055954",
                    "accelerationY": "-0.0047885496",
                    "accelerationZ": "-0.0047885496",
                    "drivingState": "DRIVING",
                    "latitude": "12.921918",
                    "longitude": "77.658917",
                    "next_route_coordinate": "null",
                    "speed": "33",
                    "timeStamp": "1560319632021",
                    "tripID": "7090291482_1560319518940",
                    "maneuver_list": [],
                    "tripState": "null",
                    "eventId": "event_tacticurv_id"
                }
            ]
        ]

关于swift - 如何将此 Json 正文转换为 alamofire 参数格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56911115/

相关文章:

python - 将空值插入python字典

python - 在python中自定义字典迭代器

ios - CLLocationManager 在模拟器上不断生成 EXC_BAD_INSTRUCTION

iphone - 根据设备 iPhone 或 iPod touch 关闭功能

ios - UIPopoverPresentationController : multiple permittedArrowDirections order priority

ios - 使用 `ipa build` 和 `deliver` 工具后出现无效的临时配置文件错误(自动提交应用程序)

javascript - 将 javascript 变量传输到 Objective C (IOS)

ruby-on-rails - 如何在 ActiveRecord 类方法中使用 'map' 方法?

swift - 如何转换为 String - 从 Swift 1.1 更新到 Swift 1.2

ios - 一旦该节点在 ARCamera 中不可见,获取指向 SCNNode 的方向箭头