gpt4 book ai didi

ios - 将 Container 的所有值转换为 NSString

转载 作者:行者123 更新时间:2023-11-28 19:50:45 27 4
gpt4 key购买 nike

我在与服务器通信时遇到问题。 Web 服务器期望 JSON 对象中的所有参数都是字符串。因此每个容器中的每个数字和每个 bool 值都需要是一个字符串。

在我的示例中,我有一个充满键值的 NSDictionary(值是各种类型 - 数字、数组等)。例如:

{
"AnExampleNumber":7e062fa,
"AnExampleBoolean":0,
"AnExampleArrayOfNumber":[17,4,8]
}

必须变成:

{
"AnExampleNumber":"7e062fa",
"AnExampleBoolean":"0",
"AnExampleArrayOfNumber":["17","4","8"]
}

我尝试了标准的 NSJSONSerializer 但它没有给我任何选择来做我需要的事情。然后我尝试手动将字典中的所有内容转换为字符串,但这似乎是开销。有人给我提示吗?也许是一个序列化程序,或者一个将容器中的任何对象转换为字符串的函数?

最佳答案

这是您可以做到的一种方式。它没有经过优化,也没有错误处理。它只支持 NSJSONSerializer 支持的对象种类。

#import <Foundation/Foundation.h>

@interface NSObject(SPWKStringify)
- (id)spwk_stringify;
@end

@implementation NSObject(SPWKStringify)
- (id)spwk_stringify
{
if ([self isKindOfClass:[NSDictionary class]]) {
NSDictionary *dict = (NSDictionary *)self;
NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init];

for (NSString *key in [dict allKeys]) {
newDict[key] = [dict[key] spwk_stringify];
}

return newDict;
} else if ([self isKindOfClass:[NSArray class]]) {
NSMutableArray *newArray = [[NSMutableArray alloc] init];

for (id value in ((NSArray *)self)) {
[newArray addObject:[value spwk_stringify]];
}

return newArray;
} else if (self == [NSNull null]) {
return @"null"; // representing null as a string doesn't make much sense
} else if ([self isKindOfClass:[NSString class]]) {
return self;
} else if ([self isKindOfClass:[NSNumber class]]) {
return [((NSNumber *)self) stringValue];
}

return nil;
}
@end

int main(int argc, char *argv[]) {
@autoreleasepool {
NSDictionary *dict = @{
@"AnExampleNumber": @1234567,
@"AnExampleBoolean": @NO,
@"AnExampleNull": [NSNull null],
@"AnExampleArrayOfNumber": @[@17, @4, @8],
@"AnExampleDictionary": @{@"innerKey": @[@55, @{@"anotherDict": @[@"foo", @[@1, @2, @"three"]]}]}
};

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[dict spwk_stringify] options:NSJSONWritingPrettyPrinted error:NULL];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

NSLog(@"result: %@", jsonString);
}
}

输出将是:

result: {
"AnExampleNumber" : "1234567",
"AnExampleNull" : "null",
"AnExampleDictionary" : {
"innerKey" : [
"55",
{
"anotherDict" : [
"foo",
[
"1",
"2",
"three"
]
]
}
]
},
"AnExampleBoolean" : "0",
"AnExampleArrayOfNumber" : [
"17",
"4",
"8"
]
}

注意:请记住,将 [NSNull null] 转换为字符串没有任何意义,实际上可能会产生误导和危险。

享受吧。

关于ios - 将 Container 的所有值转换为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29391545/

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