将 [NSDictionary]() 作为 JSON 发送到 API

Sending [NSDictionary]() to API as JSON

我有一个 [NSDictionary]() 从 Realm Result 创建的。 我的主要目标是将此 [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 { [=13=].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 }}

请帮忙。 提前谢谢你。

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

  • 第一个字典:orderRequestUserValues。
  • 第二个字典:requestParameters。
  • 第 3 个字典: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 到 post 到您的网络服务:

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

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

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)