我在使用JSON填充的NSDictionary存在问题。 JSON数据看起来像这样,并且能够获得金额
Balance = {
amount = "33069.42";
currencyCode = USD;
};
NSString *amtStr = [[account objectForKey:@"Balance"] valueForKey:@"amount"]);
NSString *formattedAmt = [NSString stringWithFormat:@"$%.2f", [amtStr floatValue]];
但是,在某些情况下,金额没有价值,而金额有另一个NSDictionary,如下面的示例所示
Balance = {
amount = {
nil = 1;
};
currencyCode = {
nil = true;
};
};
当我尝试执行stringWithFormat
时NSString *formattedAmt = [NSString stringWithFormat:@"$%.2f", [amtStr floatValue]];
投掷
-[__NSCFDictionary floatValue]: unrecognized selector sent to instance 0x8a551e0
关于如何在第二种情况下获得金额价值的任何想法?如果金额为零,我需要将amtStr设置为0。
提前感谢您的帮助。
答案 0 :(得分:2)
您需要测试返回的课程
id amt = [[account objectForKey:@"Balance"] valueForKey:@"amount"]);
if ([amt isKindOfClass:[NSString class]]
{
NSString *amtStr = (NSString *)amt;
NSString *formattedAmt = [NSString stringWithFormat:@"$%.2f", [amtStr floatValue]];
//...
}
答案 1 :(得分:1)
在第二种情况下,amtStr
是NSDictionary
(尽管被声明为NSString
),因此[amt isKindOfClass:[NSDictionary class]]
将返回true,[amt isKindOfClass:[NSString class]]
将返回false。
答案 2 :(得分:1)
在解析float之前,只检查amtStr
是否为字符串:
id amtStr = [[account objectForKey:@"Balance"] valueForKey:@"amount"]);
if([amtStr isKindOfClass:[NSString class]] ){
String *formattedAmt = [NSString stringWithFormat:@"$%.2f", [amtStr floatValue]];
}
答案 3 :(得分:1)
不要认为amount
总是一个字符串。检查对象amount
,看看它是NSDictionary
还是字符串
NSDictionary * balance = [account objectForKey@"Balance"];
id amountObject = [balance objectForKey:@"amount"];
if (amountObject != nil( {
if ([amountObject isKindOfClass:([NSDictionary class])]) {
// amount is a dictionary
} else if ([amountObject isKindOfClass:([NSString class])]) {
// amount is a number
}
}
答案 4 :(得分:1)
作为一般规则:当从已接收或读取的编码JSON访问数据时,请务必仔细检查您收到的对象类。