首页 > 解决方案 > 如何在 swift 4、iOS 11.3、xcode 9 中将已编码的 json 数据(作为字符串)编码为另一个 json?

问题描述

我正在尝试将已编码的 json 数据编码为另一个 json 作为字符串元素。

  1. 首先,我使用 jsonEncoder 创建了一个 json 数据作为字符串,

  2. 现在我必须将该 json 数据(字符串)作为另一个 jsonEncoder 元素的元素发送。

到目前为止,我已经创建了这个。

我的第一个结构是

struct OrderDetailJSON: Encodable {
    var allOrder: [AllOrder]
    let TaxDetials: TaxDetail

    init(allOrder: [AllOrder] = [AllOrder](), TaxDetials: TaxDetail) {
        self.allOrder = allOrder
        self.TaxDetials = TaxDetials
    }

    mutating func addOrder(orders allOrders: AllOrder){
        allOrder.append(allOrders)
    }

}

struct AllOrder: Encodable {
    let date_time: String
    let item: String
    let name: String
    let price: String
}

struct TaxDetail: Encodable {
    let tax_per: String
    let tax_name: String
}

我正在使用 json 编码器对此进行编码,

var jsonString = ""
var cartData = [CartDataModel]() `//My data Model`
do {
            let taxex = TaxDetail(tax_per: defaults.string(forKey: "STORE_TAX")!, tax_name: defaults.string(forKey: "STORE_TAX_NAME")!)
            var placeOrder = OrderDetailJSON(TaxDetials: taxex)
            var allOre: AllOrder!
            for item in cartData {
                allOre = AllOrder(date_time: item.time, item: "\(item.quantity)", name: item.name, price: "\(item.price)")
                placeOrder.addOrder(orders: allOre)
            }
            let jsonData = try JSONEncoder().encode(placeOrder)

            jsonString = String(data: jsonData, encoding: .utf8)!
            print(jsonString)
            print(jsonData)

        }catch{
            print("Encode error...")
        }

我得到的json输出是,

{
  "TaxDetials": {
    "tax_per": "5",
    "tax_name": "CGST & SGST"
  },
  "allOrder": [
    {
      "date_time": "NA",
      "name": "Manchurian",
      "item": "2",
      "price": "87"
    },
    {
      "date_time": "NA",
      "name": "Paneer Tikka",
      "item": "3",
      "price": "150"
    },
    {
      "date_time": "NA",
      "name": "snacks",
      "item": "2",
      "price": "54"
    }
  ]
}

现在我必须将这个 json 数据作为另一个 json 的字符串元素发送,就像这样

struct OrderPlace: Encodable {
    let apikey: String
    let ord_store_name: String
    let ord_amount: String
    let cust_mob: String
    let store_id: String
    let order_details: String
}

do {
     let orders = OrderPlace(apikey: "382dfc83", ord_store_name: storeName, ord_amount: "\(finalCartPrice)", cust_mob: defaults.getMobNo(), store_id: storeId, order_details: jsonString) 
           orderPlaceUrl.httpBody = try JSONEncoder().encode(orders)
       }catch{
           print("Encode error...")
      }

它抛出 dataCorrupted 错误。但是,当我将 json 字符串从“”更改为“”时,我得到了邮递员内部的响应。

那么,我怎样才能将上面的json字符串(带有“”)转换为下面的json字符串(带有'')

{
  'TaxDetials': {
    'tax_per': '5',
    'tax_name': 'CGST & SGST'
  },
  'allOrder': [
    {
      'date_time': 'NA',
      'name': 'Manchurian',
      'item': '2',
      'price': '87'
    },
    {
      'date_time': 'NA',
      'name': 'Paneer Tikka',
      'item': '3',
      'price': '150'
    },
    {
      'date_time': 'NA',
      'name': 'snacks',
      'item': '2',
      'price': '54'
    }
  ]
}

注意:如果有人需要更多信息,请发表评论。

标签: iosiphonexcodeswift4jsonencoder

解决方案


推荐阅读