当前位置: 首页 > 知识库问答 >
问题:

如何用ObjectMapper映射json响应?

段成益
2023-03-14
{   
  frameData = { 
    eStatus = Active;
    frameId = 12;
    "frame_IMEI" = frrrrr;
    "frame_name" = "EHTPKEIWPR_frrrrr";
    "frame_token" = "";
    "frame_user" = 7;
    "is_frameowner" = 1;
    ownerName = jyoti;
    "owner_picture" = "http";
  };
  message = "Frame added successfully.";
  status = 1;
}
import UIKit
import ObjectMapper

class AddFrameCodeModel: Mappable {

  var status         : Bool?
  var message        : String?
  var frameData      : [FrameDataModel]?


  required init?(_ map: Map) {
    mapping(map)
  }

  func mapping(map: Map) {
    status <- map["status"]
    message <- map["message"]
    frameData <- map["frameData"]

   }

 }

 class FrameDataModel : Mappable {

   var frame_name         : String?
   var eStatus            :String?
   var frame_IMEI     : String?
   var frame_token    : String?
   var frame_user     : String?
   var frameId        : String?
   var is_frameowner  : Bool?
   var ownerName      : String?
   var owner_picture  : String?
   required init?(_ map: Map) {
     mapping(map)
   }

   func mapping(map: Map) {
     frame_name <- map["frame_name"]
     eStatus <- map["eStatus"]
     is_frameowner <- map["is_frameowner"]
     frame_IMEI <- map["frame_IMEI"]
     frame_token <- map["frame_token"]
     frame_user <- map["frame_user"]
     frameId <- map["frameId"]
     ownerName <- map["ownerName"]
     owner_picture <- map["owner_picture"]
   }
 }
let addFrameCodeData  = Mapper<AddFrameCodeModel>().map(JSONObject)

共有1个答案

刘阳舒
2023-03-14

您可以删除FrameDataModel类型中的括号,因为它不是字典响应数组,并执行一些“自定义转换”,如下https://github.com/hearst-dd/objectMapper所示。

但是我建议您保留JSON提供的类型,或者将其中一些设置为anyObject,然后在map函数中处理所有的强制转换。

我还将为“framedata”创建一个独立的模型,并将其作为一个对象。

import ObjectMapper
var status         : Int?
var message        : String?
var frameData      : FrameDataResponse?

required init?(_ map: Map){}

func mapping(map: Map)
{
    status <- map["status"]
    message <- map["message"]
    frameData <- map["frameData"]

}

class FrameDataResponse : Mappable{

    var eStatus = String?
    var frameId = Int?
    var frame_IMEI = String?
    var frame_name = String?
    var frame_token = String
    var frame_user = Int?
    var is_frameowner = Int?
    var ownerName = String?
    var owner_picture = String?

    required init?(_ map: Map){}

    func mapping(map: Map)
    {
        eStatus <- map["eStatus"]
        frameId <- map["frameId"]
        frame_IMEI <- map["frame_IMEI"]
        frame_name <- map["frame_name"]
        frame_token <- map["frame_token"]
        frame_user <- map["frame_user"]
        is_frameowner <- map["is_frameowner"]
        ownerName <- map["ownerName"]
        owner_picture <- map["owner_picture"]

    }
}
let eStatus: String
let id: String
let imei: String
let name: String
let token: String
let user: Int
let isOwner: Int
let ownerName: String
let ownerPicture: String

init(eStatus: String, id: String, imei: String, name: String, token: String, user: Int, isOwner: Int, ownerName: String, ownerPicture: String) {
    self.eStatus = eStatus
    self.id = id
    self.imei = imei
    self.name = name
    self.token = token
    self.user = user
    self.isOwner = isOwner
    self.ownerName = ownerName
    self.ownerPicture = ownerPicture
}

}

对于映射函数,请尝试以下操作:

导入基础

    let status : String = jsonResponse.status!

    let message : String = jsonResponse.message!

    //if you changed the types in the frameDataModel, you will need to cast it here
    let frameData : FrameDataModel = FrameDataModel(eStatus: jsonResponse.message!,
                                          id: jsonResponse.frameId!,
                                        imei: jsonResponse.frame_IMEI!,
                                        name: jsonResponse.frame_name!,
                                        token: jsonResponse.frame_token!,
                                        user: jsonResponse.frame_user!,
                                        isOwner: jsonResponse.is_frameowner!,
                                        ownerName: jsonResponse.ownerName!,
                                        ownerPicture: jsonResponse.owner_picture!)

    return (status, message, frameData)

}
 类似资料:
  • 问题内容: 我正在使用ObjectMapper(https://github.com/Hearst- DD/ObjectMapper )将JSON映射到Swift对象。 说我有这个JSON结构: 我有以下Swift对象: 如何使用JSON对象中的键区分映射和映射?非常感谢! 问题答案: 细节 Xcode 10.2.1(10E1001),Swift 5 json档案 ObjectMapper示例 检

  • 我是java新手,正在尝试学习objectmapper。我正在使用它将地图转换为pojo。地图中的键是字符串,所有值都是字符串值,除了我想转换为地图的值。请仔细阅读下面的示例代码,以获得更清晰的图片。 POJO类: 测试代码: 例外: 尝试的变体选项: 我知道我可以将map1字段也保留为String,然后使用另一个对象映射器实例将其转换为map,但我想避免它。有没有办法直接将测试代码中的字符串转换

  • 我可以使用Jackson ObjectMapper将JSON文件中的数据直接加载到我自己的数据结构中吗?我试图从一个JSON文件中加载一个对象映射,但不知道该怎么做。 例如,给定: 我想在JSON文件中创建/加载视图映射。如果我的JSON是: 我希望能够将所有内容加载到地图中。 我尝试了以下方法,但没有成功。它只是将所有内容加载到地图中: 我猜我的错误是告诉制图员把它当作地图来读。类,但不确定如何

  • 问题内容: 首先,我正在使用NEST 5.5.0。 我对远程elasticsearch-index有以下用法: 索引中的映射(除了cvrNummer之外没有其他属性)如下: 我还有下面的类,其结果应该映射到: 现在,搜索(searchResponse)保留了预期的结果(1个结果),其中与cvrNummer有关的部分如下所示: 但是,当我查找searchResponse.Documents时,我具有

  • 问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例

  • 我是golang的新手,正在尝试解析来自web服务的一些响应,响应看起来像这样: 您可以看到每个元素都有一个键“数据”和“类型”(必须),但不同的“类型”会带来不同的“数据”字段。 你能建议一种有效的方法来构建这种对Golang结构的响应吗? 谢谢你。

  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 JSON Mapping 一节 Proto3支持JSON格式的标准编码, 让在系统之间分享数据变得容易. 编码在下面的表格中以type-by-type的基本原则进行描述. 如果一个值在json编码的数据中丢失或者它的值是null, 在被解析成protocol buffer时它将设置为对应的默认值.如果一个字段的值正好是p