无法将 NSDictionary 值转换为 json

Posted

技术标签:

【中文标题】无法将 NSDictionary 值转换为 json【英文标题】:Unable to convert NSDictionary values to json 【发布时间】:2014-02-13 14:25:17 【问题描述】:

我有 NSDictionary 值,我想将其转换为 Json 字符串,例如:


    body = "10-feb";
    comments =     (
    );
    complete = 1;
    "created_at" = "2014-02-09T15:56:01Z";
    "due_at" = "2014-01-10 20:00:00 +0000";
    "due_on" = "2014-10-02";
    id = 439824;
    "notification_sent" = 0;
    "notify_user" = 0;
    "organization_id" = 972;
    participants =     (
    );
    reminders =     (
    );
    starred = 0;
    "updated_at" = "2014-02-09T15:56:01Z";
    "user_id" = 11129;

我将其转换为 json 的方式是:

- (NSString*) jsonStringWithPrettyPrint:(BOOL) prettyPrint str:(NSDictionary *)str 
    NSError *error = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:str
                                                       options:(NSJSONWritingOptions)    (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
                                                         error:&error];

    if (! jsonData) 
        NSLog(@"jsonStringWithPrettyPrint: error: %@", error.localizedDescription);
        return @"";
     else 
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    

我不知道为什么它总是无法转换。?

【问题讨论】:

你遇到了什么错误? due_at 还是NSDate 是的,它是一个 NSDate..我也添加了异常断点..它停止但我尝试按继续在控制台中获取堆栈跟踪,但没有任何日志和错误仍然为零。 这是错字吗??? options:(NSJSONWritingOptions) (prettyPrint ? NSJSONWritingPrettyPrinted : 0) 我不相信。 【参考方案1】:

传入NSJSONSerialization 的对象只能包含NSDictionaryNSArrayNSStringNSNumberNSNull

NSDate 对象必须首先使用NSDateFormatter 显式转换为NSStrings

【讨论】:

将日期字符串转换为 NSString[NSString stringWithFormat:@"%@", date] 并且问题消失了 :) 您创建 JSON 数据的问题已经解决。但是必须有人处理数据。检查您的文档以了解他们的期望。顺便提一句。您可以更轻松地调用 [myDate description]。

以上是关于无法将 NSDictionary 值转换为 json的主要内容,如果未能解决你的问题,请参考以下文章

无法将“__NSSingleObjectArrayI”类型的值转换为“NSDictionary”

Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”

Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”

无法将“Promise<[NSDictionary]>”类型的值转换为预期的参数类型“Guarantee<Void>”

Swift JSON 错误,无法将类型“__NSArrayM”(0x507b58)的值转换为“NSDictionary”(0x507d74)

无法从 JSON 中获取值(无法将类型“__NSCFNumber”(0x7fff87b9c520)的值转换为“NSDictionary”(0x7fff87b9d5b0))