因此,我使用 github 上的 alamofire 和对象映射器库。
我的函数中有这段代码
Alamofire.request(urlRequest).responseObject { (response: DataResponse<News>) in }
Run Code Online (Sandbox Code Playgroud)
我也将响应与状态代码一起检查
switch response.result {
case .success:
if let object = responseObject {
completion(object)
}
break;
case .failure(let error):
print(error)
if let statusCode = response.response?.statusCode {
var message = String()
switch statusCode {
//status code checking here
}
}
else {
var message = String()
message = error.localizedDescription
}
break;
}
Run Code Online (Sandbox Code Playgroud)
所以我有几个 api 调用,所有 api 调用也将实现此状态代码检查。我不想为我的所有 api 调用函数继续复制粘贴这段代码
所以我打算做的是创建一个专用函数来检查 api 调用的状态代码
但我面临一个问题。如何创建接受所有类型的 DataResponse<> 的通用函数参数?
我尝试运行这段代码但失败了
// validateResponse function
static …Run Code Online (Sandbox Code Playgroud) 我使用Alamofire,ObjectMapper和Realm并保存我在领域中获取和映射的对象.是否可以自动删除孤立对象?
例如,我获取联系人列表.现在已从响应中删除了一个联系人,应自动从Realm中删除.这是objectmapper可以做的吗?
亲爱的Stackoverflowers,
我在使用 ObjectMapper 方面遇到了障碍,所以让我们开门见山。
我将模型以 JSON 形式保存为 SQLite 表中的临时记录。每个模型都有一个 Type 字段,用于唯一标识它映射到的模型类型。
例如,如果我们有符合 Animal 协议的模型 Dog、Cat、Mouse,则有一个等效的 AnimalType (DogType、CatType、MouseType) 枚举,它也是每个模型中的一个字段。保存到数据库后,我很难找到一种优雅的方法将从数据库加载的 JSON 映射到 Model 类的实际实例。
我目前正在做的是将 JSON 通过 NSJSONSerialization 转换为 JSON 字典,并在字典中查询类型。找到类型后,我会切换所有类型,实例化相关的 Mapper 对象并尝试反序列化该对象。我觉得这是一种蛮力方法,并且认为可能有更好的方法来解决这个问题。
结论:
模型:狗、猫、小鼠(符合动物,有动物类型要求)
枚举:动物类型(DogType、CatType、MouseType)
问题:如何确定并正确实例化 Mapper 对象以将加载的 JSON 反序列化到实例中,而不是手动检查每个类型并实例化正确的映射器。
enum AnimalType {
case Dog
case Cat
case Mouse
}
protocol Animal {
var animalType: AnimalType { get }
}
struct Dog: Animal {
var animalType = AnimalType.Dog
}
struct Cat: Animal {
var animalType = …Run Code Online (Sandbox Code Playgroud) 当我没有价值时,我正在测试deserializing一个对象。我希望该对象等于.collectionJsonNodenull
这就是我正在尝试的:
public class ImmutableDiscoveredUrlDeserializer extends JsonDeserializer<ImmutableDiscoveredUrl> {
String parentUrl;
Double parentUrlSentiment;
Set<String> childUrls;
Boolean isParentVendorUrl;
Map<TagClassification, Set<String>> parentUrlArticleTags;
/*
* (non-Javadoc)
* @see com.fasterxml.jackson.databind.JsonDeserializer#deserialize(com.fasterxml.jackson.core.JsonParser, com.fasterxml.jackson.databind.DeserializationContext)
*/
@Override
public ImmutableDiscoveredUrl deserialize(JsonParser p, DeserializationContext ctx)
throws IOException {
JsonNode node = p.readValueAsTree();
parentUrl = defaultIfNull(node.get("parentUrl").asText(), null);
childUrls = defaultIfNull(parseChildUrls(node), emptySet());
isParentVendorUrl = defaultIfNull(Boolean.valueOf(node.get("isParentVendorUrl").asText()), null);
parentUrlArticleTags = defaultIfNull(parseArticleTags(node.get("parentUrlArticleTags")), emptyMap());
return ImmutableDiscoveredUrl.discoveredUrl().parentUrl(parentUrl)
.parentUrlSentiment(parentUrlSentiment).childUrls(childUrls)
.isParentVendorUrl(isParentVendorUrl).parentUrlArticleTags(parentUrlArticleTags);
}
private Set<String> parseChildUrls(JsonNode node) throws IOException {
ObjectMapper tagsMapper = new ObjectMapper();
return …Run Code Online (Sandbox Code Playgroud) 我有我的模特课
class CPOption : Object, Mappable
{
dynamic var optionId : Int64 = 0
override static func primaryKey() -> String? {
return "optionId"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
optionId <- map["id"] //**Here i need to transform string to Int64**
}
}
Run Code Online (Sandbox Code Playgroud)
我的输入JSON包含optionId作为String.
"options": [
{
"id": "5121",
},
]
Run Code Online (Sandbox Code Playgroud)
我需要在Objectmapper Map函数中将此传入的字符串类型转换为Int64.
我正在尝试建立一个系统,其中我的所有 api 请求都通过一个函数并将它们映射到相应的对象
func sendApi<T>(url : String , httpMethod : HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil , callbackSuccess : @escaping (T) -> () , callbackFailure : @escaping (T) -> ()) where T : Mappable {
Alamofire.request(url, method: httpMethod, parameters: parameters , encoding: encoding, headers: headers).responseObject{(response: (DataResponse<T>))in
switch response.result {
case .success :
let result = Mapper<T>().map(JSONObject: response.value)!
callbackSuccess(result)
break;
case .failure(let error):
if((error as NSError).code == ErrorResponse.noInternetConnection){
// errorCallBack(ErrorResponse.noInternetConnectionString)
}
// …Run Code Online (Sandbox Code Playgroud) 使用 ObjectMapper 解析通用对象时出现错误 这是我的类:
class BaseResponse<T>: NSObject, Mappable {
var isSuccess: Bool!
var data: T?
required init?(map: Map) {
super.init()
self.mapping(map: map)
}
func mapping(map: Map) {
isSuccess <- map["success"]
data <- map["data"]
}
}
class Login: NSObject, Mappable {
var isProfileUpdated: Bool?
var role: String!
var profileId: Int!
var email: String!
override func mapping(map: Map) {
isProfileUpdated <- map["profile_updated"]
role <- map["role"]
profileId <- map["id"]
email <- map["email"]
}
}
Run Code Online (Sandbox Code Playgroud)
我解析了这个json:
{
"token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTU4MDkzODAuNjg4LCJpYXQiOjE1MTU3MjI5ODAuNjg4LCJpc3MiOiJleWUtc29sdXRpb24udm4iLCJpZCI6MTgsInJvbGUiOiJlbXBsb3llZSIsInNfaWQiOjg5LCJwX2lkIjoxMX0.v8iEgEXlXGzv5HmDvWs-tUNNYZFBQqCtTLaUkgqXqM0",
"data" : {
"email" …Run Code Online (Sandbox Code Playgroud) A级
public class ClassA {
private String id;
private Object rawData;
}
Run Code Online (Sandbox Code Playgroud)
B级
public class ClassB {
private String name;
}
Run Code Online (Sandbox Code Playgroud)
C类
public class ClassC {
String address;
}
Run Code Online (Sandbox Code Playgroud)
主班
public class MainExample {
public static void main( String[] args ) throws IOException {
ObjectMapper mapper = new ObjectMapper( );
ClassB classB = new ClassB();
//ClassC classC = new ClassC();
ClassA classA = new ClassA();
classA.setRawData( classB );
//classA.setRawData( classC );
if (classA.getRawData() instanceof ClassB) {
System.out.println("true ");
} else …Run Code Online (Sandbox Code Playgroud) 我是java和objectMapper的新手。我正在尝试解析json字段,该字段可能是键具有两种类型,它可以是字符串或数组。
例子:
{
"addresses": [],
"full_name": [
"test name_1",
"test name_2"
],
}
Run Code Online (Sandbox Code Playgroud)
要么
{
{
"addresses": [],
"full_name": "test name_3",
}
}
Run Code Online (Sandbox Code Playgroud)
类的例子:
{
"addresses": [],
"full_name": [
"test name_1",
"test name_2"
],
}
Run Code Online (Sandbox Code Playgroud)
我使用objectMapper来反序列化json,当“ full_name”字段具有字符串但到达数组时无法反序列化时,它可以正常工作。
这个想法是,当到达属性时将字符串放入值,但到达数组时,将de数组元素串联为字符串(String.join(“,”,value))
可以在类方法中应用自定义反序列化吗?例如setFullName()(使用lombok.Data)
我在该站点上看到了其他示例,但没有用。
谢谢大家
After updating the Xcode to 12.5 and updating all the pods , i start getting the above error in all files where mapping is happening
Reference to generic type 'Map' requires arguments in <...> Insert '<<#Key: _MapKey#>, <#Value: RealmCollectionValue#>>'
class DayPartData: Object, Mappable {
@objc dynamic var code = 0
@objc dynamic var text : String?
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
code <- map["code"]
text <- map["text"]
}
}
Run Code Online (Sandbox Code Playgroud)
am I missing something here?