【问题标题】:Sending [NSDictionary]() to API as JSON将 [NSDictionary]() 作为 JSON 发送到 API
【发布时间】:2017-03-09 12:11:37
【问题描述】:

我有一个从领域结果创建的[NSDictionary]()。 我的主要目标是将此[NSDictionary]() 解析为 JSON,然后通过 Alamofire 将其发送到 API,但使用此数据我必须向用户发送密码和详细信息。

let orderRequestUserValues  = [  "ClientID": "TEST",
                                 "UserName": "sysadmin",
                                 "Password": "123456",
                                 "ModuleID": "StockProcessing",
                                 "FunctionID": "SetStockOrder",
                                 "TransmissionFlags": 32,
                                 "TransmissionMethod": 5,
                                 "RequestParameters":
                                 [
                                   "OrderType": 1,
                                   "Notes": "John Is Reordering",
                                   "ListofStockItemOrderData": //<--[NSDictionary]() data has to come here
                                 ]
                               ]

有了这个orderRequestUserValues,我必须发送[NSDictionary]() 正如评论中所见,为“ListofStockItemOrderData”。

我很新,所以请不要嘲笑我。 我想知道如何将 orderRequestUserValues[NSDictionary]() 转换为可以通过 Alamofire 发送的 JSON。 JSON 接收的最终产品必须如下所示:

额外信息 以下是我如何将 Realm 存储的数据转换为 NSDictionary

   extension Object {
   func toDictionary() -> NSDictionary {
    let properties = self.objectSchema.properties.map { $0.name }
    let dictionary = self.dictionaryWithValuesForKeys(properties)
    let mutabledic = NSMutableDictionary()
    mutabledic.setValuesForKeysWithDictionary(dictionary)

    for prop in self.objectSchema.properties as [Property]! {
        // find lists
        if let nestedObject = self[prop.name] as? Object {
            mutabledic.setValue(nestedObject.toDictionary(), forKey: prop.name)
        } else if let nestedListObject = self[prop.name] as? ListBase {
            var objects = [AnyObject]()
            for index in 0..<nestedListObject._rlmArray.count  {
                let object = nestedListObject._rlmArray[index] as AnyObject
                objects.append(object.toDictionary())
            }
            mutabledic.setObject(objects, forKey: prop.name)
        }} 
         return mutabledic }}

请帮忙。 提前谢谢你。

【问题讨论】:

    标签: ios json swift2 type-conversion nsdictionary


    【解决方案1】:

    你需要构建 3 个字典来实现你想要的。

    • 第一个字典:orderRequestUserValues。
    • 第二个字典:requestParameters。
    • 第三个字典:listofStockItemOrderData。

    然后你这样做:

    NSDictionary *listofStockItemOrderData = [NSDictionary dictionaryWithObjectsAndKeys:@3,@"StockItemUnique",
                                              @5,@"StockQty",
                                              @0,@"StockUnitCost",
                                              @1,@"OrderLocationUnique",nil];
    
    NSDictionary *requestParameters = [NSDictionary dictionaryWithObjectsAndKeys:@1,@"OrderType",
                                       @"John Is Reordering",@"Notes",
                                       listofStockItemOrderData,@"ListofStockItemOrderData", nil];
    
    NSDictionary *orderRequestUserValues = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST",@"ClientID",
                                            @"sysadmin",@"UserName",
                                            @"123456",@"Password",
                                            @"StockProcessing",@"ModuleID",
                                            @"SetStockOrder",@"ClientID",
                                            @32,@"TransmissionFlags",
                                            @5,@"TransmissionMethod",
                                            requestParameters,@"RequestParameters",nil];
    

    最后,您将字典转换为 NSData json 以发布到您的网络服务:

    NSError *error = nil;
    NSData *json = [NSJSONSerialization dataWithJSONObject:orderRequestUserValues options:NSJSONWritingPrettyPrinted error:&error];
    

    【讨论】:

    • 我已经有一个 [NSDictionary]() 用于“ListofStockItemOrderData”,它是我的领域数据。我将如何加入这 3 个词典?
    • 这是Objective c?
    • 很遗憾。我对 swift 没有太多经验。
    • 如果你已经有 listofStockItemOrderData 字典,那么你可以直接将它添加到 requestParameters 而无需像我一样初始化它。
    【解决方案2】:

    这是我为获得想要的结果所做的:

    var orderRequestUserValues : Dictionary  = [  "ClientID": "TEST",
                                                      "UserName": "sysadmin",
                                                      "Password": "123456",
                                                      "ModuleID": "StockProcessing",
                                                      "FunctionID": "SetStockOrder",
                                                      "TransmissionFlags": 32,
                                                      "TransmissionMethod": 5
    
    
        ]
    
        var requestParameters : Dictionary = [
                                               "OrderType": 1,
                                                "Notes": "John Is Reordering"
    
        ]
    
    
    
        requestParameters.updateValue(objectDictionaries, forKey: "ListofStockItemOrderData")
    
        orderRequestUserValues.updateValue(requestParameters, forKey: "RequestParameters")
    
    
    
       //print(orderRequestUserValues)
    
    
        do{
    
        let newDict = try NSJSONSerialization.dataWithJSONObject(orderRequestUserValues, options: NSJSONWritingOptions.PrettyPrinted)
    
        let decoded = try NSJSONSerialization.JSONObjectWithData(newDict, options: [])
            print(decoded)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多