gpt4 book ai didi

ios - 有没有办法从这个晦涩的对象中获取属性并将其转换为 JSON?

转载 作者:行者123 更新时间:2023-11-29 11:48:40 26 4
gpt4 key购买 nike

我正在使用正在交付 this object to me 的远程图书馆.

如果我设置调试器,我会得到以下信息:

KandyChatMessage: UUID - 70886A79-2FF60F5E1A3961EF , timestamp - 2017-02-13 17:46:12 +0000 , sender - uri - 3@domain.domain.com, userName - 3, domain - domain.domain.com, type - 0, associationType - 1 , recipient - uri - afdab3bfb5774@domain.domain.com, userName - afdab3bfb57a12b5, domain - domain.domain.com, type - 1, associationType - 1 , type: - 1 , mediaItem - KandyTextMessageData - text:3 , info:(null) , isIncoming - 1 , additionalData - (null), fromHistory - NO

它是通过这种方法传递的:

-(void)_addEventAndRefresh:(id<KandyEventProtocol>)event{

目标是将此对象转换为 JSON,格式如下:

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:event
options:0
error:&error];

但是,这会导致我的应用程序崩溃,因为我假设 event 不满足可序列化的 NSMUtableArrayNSDictionary 的所有规则一些原因。

这让我有两个选择。第一,我可以找到一些巧妙的方法将任何对象转换为 JSON。或者两个,我可以挑选出它的数据并从头开始编写一个 NSDictionary 对象。

有人知道如何拆开这种物体吗?

在我的调试器中,它似乎没有任何响应..

> po event.UUID
=> error: property 'UUID' not found on object of type 'id'
> po event.timestamp
=> error: property 'timestamp' not found on object of type 'id'

最佳答案

您是对的,该对象可能无法序列化为 JSON,因为它 doesn't qualify in one or all of these ways .简而言之,它必须是字符串、数字和其他集合的集合,不能是别的。

This answer suggests如果你知道这个类,一种获取属性的方法。简而言之,它依赖于 objc_property_t *properties = class_copyPropertyList(klass, &outCount); 来获取属性。

您可以使用它来获取对象的 JSON 可序列化属性,将它们的值(以它们的名称作为键)放入字典中。然后用 JSON 序列化它。

编辑为了演示,我将此方法添加到其他答案建议的 PropertyUtil 类中......

+ (id)jsonSerializableFromObject:(id)object {
if ([object isKindOfClass:[NSString self]] ||
[object isKindOfClass:[NSNumber self]] ||
[object isKindOfClass:[NSNull self]]) {
return object;
} else if ([object isKindOfClass:[NSArray self]]) {
NSMutableArray *result = [NSMutableArray array];
for (id e in (NSArray *)object) {
id element = [self jsonSerializableFromObject:e];
[result addObject:element];
}
return result;
} else if ([object isKindOfClass:[NSArray self]]) {
NSMutableDictionary *result = [NSMutableDictionary dictionary];
for (id key in [(NSDictionary *)object allKeys])
result[key] = [self jsonSerializableFromObject:(NSDictionary *)object[key]];
return result;
} else {
NSMutableDictionary *result = [NSMutableDictionary dictionary];
NSDictionary *props = [PropertyUtil classPropsFor:[object class]];
for (NSString *propName in [props allKeys]) {
id value = [object performSelector:NSSelectorFromString(propName)];
result[propName] = [self jsonSerializableFromObject:value];
}
return (result.count)? result : [NSNull null];
}
}

这里只是一个简单的草图:如果操作数可以序列化为 JSON,则返回它。如果操作数是数组,则回答每个元素的数组,使 json 可序列化。如果是字典也一样。否则,如果对象是任意的,应用内省(introspection)方法来获取它的属性,为每个属性调用 getter 并回答它的 json-serializable。

关于ios - 有没有办法从这个晦涩的对象中获取属性并将其转换为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com