как в список JSON после преобразования в JSON - PullRequest
0 голосов
/ 21 мая 2019

я пытаюсь это, но получаю ошибку. какой другой способ сортировки этого списка предметов.

получение ошибки Значение типа кортежа

'(String, JSON)' не имеет члена 'индекс'

  let jsonData = try JSONSerialization.data(withJSONObject: bizSnapshot.value as Any, options: .prettyPrinted)
  var bizOfferingsJson = try JSON(data: jsonData)

bizOfferingsJson items содержит itemIndex в качестве ключа как Int, я хочу отсортировать на основе этого itemIndex

 bizOfferingsJson = bizOfferingsJson.sorted(by: { $0.["itemIndex"] > $1.["itemIndex"] })

  print("bizOfferingsJson===",bizOfferingsJson)

образец данных о бизнес-предложениях

[
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "GRAMS",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 25,
          "quantity" : 1000,
          "quantitySelected" : 1000,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "ONION_RED.png"
    ],
    "bizOfferingsID" : "Vegetables_0",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 0,
    "totalCountQunatity" : 0,
    "primaryText" : "Onion Red"
  },
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "GRAMS",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 25,
          "quantity" : 1000,
          "quantitySelected" : 1000,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "POTATO.png"
    ],
    "bizOfferingsID" : "Vegetables_1",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 1,
    "totalCountQunatity" : 0,
    "primaryText" : "Potato"
  },
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "PIECES",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 3,
          "quantity" : 1,
          "quantitySelected" : 0.10000000000000001,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "CORIANDER_LEAVES_BUNCH.png"
    ],
    "bizOfferingsID" : "Vegetables_2",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 2,
    "totalCountQunatity" : 0,
    "primaryText" : "Coriander Leaves Bunch"
  },
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "GRAMS",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 8,
          "quantity" : 500,
          "quantitySelected" : 500,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "TOMATO_STANDARD.png"
    ],
    "bizOfferingsID" : "Vegetables_3",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 3,
    "totalCountQunatity" : 0,
    "primaryText" : "Tomato Standard"
  }
]

1 Ответ

1 голос
/ 21 мая 2019

Вам необходимо уточнить, какой тип вы сортируете, предполагая массив

var bizOfferingsJson = try JSON(data: jsonData).array! 
bizOfferingsJson = bizOfferingsJson.sorted(by: { $0["itemIndex"] > $1["itemIndex"] })

или используя мутирование sort

bizOfferingsJson.sort{ $0["itemIndex"] > $1["itemIndex"] }

с использованием Codable намного лучше, учитывая ваш json


struct Root: Codable {
    let isVisible: Bool
    let itemRetailInfo: ItemRetailInfo
    let imageStoragePathList: [String]
    let bizOfferingsID: String
    let masterImage: Int
    let vegNonVegInfoEnum, purpleDescription: String
    let itemQunatitySelected: Int
    let bizOfferingsHeaderTypeThree: BizOfferingsHeaderTypeThree
    let itemIndex, totalCountQunatity: Int
    let primaryText: String

    enum CodingKeys: String, CodingKey {
        case isVisible, itemRetailInfo, imageStoragePathList, bizOfferingsID, masterImage, vegNonVegInfoEnum
        case purpleDescription = "description"
        case itemQunatitySelected, bizOfferingsHeaderTypeThree, itemIndex, totalCountQunatity, primaryText
    }
}

// MARK: - BizOfferingsHeaderTypeThree
struct BizOfferingsHeaderTypeThree: Codable {
    let indexOrder: Int
    let headerText: String
    let isVisible: Bool
}

// MARK: - ItemRetailInfo
struct ItemRetailInfo: Codable {
    let units: String
    let quantityPrice: [QuantityPrice]
}

// MARK: - QuantityPrice
struct QuantityPrice: Codable {
    let discountPrice, regularPrice, quantity: Int
    let quantitySelected: Double
    let isEditable: Bool
}

var res = try! JSONDecoder().decode([Root].self, from: jsonData)
res.sort { $0.itemIndex > $1.itemIndex }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...