【问题标题】:try to convert nsdictionary to json, the json have two object inside尝试将nsdictionary转换为json,json里面有两个对象
【发布时间】:2018-06-12 05:42:03
【问题描述】:

我尝试转换此词典,但出现错误。

NSException * 名称:@"NSInvalidArgumentException" - 原因:@"*** +[NSJSONSerialization dataWithJSONObject:options:error:]: JSON 写入的顶级类型无效” 0x000060000044dda0

NSMutableDictionary *clientinfo = [[ NSMutableDictionary alloc] init];
            [clientinfo setObject:remittance.cliente.cliente_id forKey:ST_clientID];

            NSMutableDictionary *country = [[ NSMutableDictionary alloc] init];
            [country setObject:remittance.pais.paisID forKey:ST_countryID];

            NSMutableDictionary *remittancedata = [[ NSMutableDictionary alloc] init];
            [remittancedata setObject:remittance.nroIdentificacion forKey:ST_noidentification];
            [remittancedata setObject:clientinfo forKey:ST_client];
            [remittancedata setObject:country forKey:ST_country];

            NSError *err = nil;

            NSData * jsonData = [NSJSONSerialization dataWithJSONObject:remittance options:0 error:&err];
            NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

【问题讨论】:

  • 我认为您需要的是 NSData * jsonData = [NSJSONSerialization dataWithJSONObject:clientinfo options:0 error:&err]; 而不是 NSData * jsonData = [NSJSONSerialization dataWithJSONObject:remittance options:0 error:&err];是您想要转换为 json 数据的客户端信息字典,不是吗?
  • [NSJSONSerialization dataWithJSONObject:remittance options:0 error:&err];remittance ?你确定吗?我认为remittance 是您的自定义NSObject,而不是您要使用的字典,可能是remittancedata

标签: ios objective-c json nsdictionary


【解决方案1】:

如果您的一种或多种值或键类型无法序列化,则会出现此类问题。

Here 是支持的类型。

如果你有不兼容的类型,你需要先自己转换它们(通常是字符串表示)。

【讨论】:

    【解决方案2】:

    您正在序列化一个对象,该对象是您在 JSON 中不支持的自定义对象。您需要将 NSDictionaryNSArray 序列化为 JSON。

    NSData * jsonData = [NSJSONSerialization dataWithJSONObject: remittancedata options:0 error:&err];
    NSString * jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    

    【讨论】:

    • 虽然此代码 sn-p 可能是解决方案,但包含解释确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多