【问题标题】:converting JSON ARRAY into NSnumber Array将 JSON 数组转换为 NSnumber 数组
【发布时间】:2014-01-30 04:29:44
【问题描述】:

我使用以下代码将从 JSON 接收到的数据保存到一个数组中。

for (int i =1 ; i<[json count];i++)
{
    [_datearray addObject:[[json objectAtIndex:i] valueForKey:@"Date"]];
    [_soldarray addObject:[[json objectAtIndex:i] valueForKey:@"SoldAmount"]];
}

我不确定这保存的是什么类型的数据类型,有没有办法将一个数组保存为 NSdate 数组,另一个保存为 NSnumber 数组。因为我在这两个数组中使用核心图,但数据不会因为格式不同而绘制?我创建了一个简单的数组:

NSArray *prices;
prices = [NSArray arrayWithObjects:
          [NSDecimalNumber numberWithFloat:0],
          [NSDecimalNumber numberWithFloat:1],
          [NSDecimalNumber numberWithFloat:1],
          [NSDecimalNumber numberWithFloat:2],
          [NSDecimalNumber numberWithFloat:3],
          nil];

并且数据绘制得很好。所以我很确定这是数据类型问题。但我可能是错的。感谢您的帮助!

【问题讨论】:

  • 不要使用valueForKey:,使用objectForKey:。您的简单数组可以使用现代语法按如下方式完成:NSArray *prices = @[ @0, @1, @1, @2, @3 ]; - 虽然这给出了NSNumber,而不是NSDecimalNumber
  • 我相信 valueForKey 会返回 NSStrings。您需要将字符串转换为 nsdate 和 nsdecimal 对象
  • @Hackmodford valueForKey: 将返回任何数据,而不仅仅是NSString。或者如果有多个值,它可以返回一个NSArray
  • JSON 不处理 NSDate 对象——你需要转换。问题是,您没有告诉我们日期是如何表示的,所以我们无法告诉您该怎么做。向我们展示源 JSON 的 sn-p。
  • SoldAmount 可以作为 char 字符串或 NSNumber 返回。日期可能会作为格式化日期返回,例如“2013-12-12”(在 NSString 中)或“Unix 纪元”值,即自 1970 年 1 月 1 日以来的秒数。后者将是一个类似于 1389403553 的数字,返回作为 NSNumber。

标签: ios arrays json core-plot type-conversion


【解决方案1】:

如果从 JSON 返回的日期是字符串格式,您将需要一个数据格式化程序来将 json 字符串转换为 NSDate。

//接口声明中的一些地方

    @property (strong, nonatomic) NSDateFormatter * _dateFormatter_en_US_POSIX;

然后给类添加方法

    /** create a date formatter to send data to a JSON consumer
     *
     */
    - (NSDateFormatter *)dateFormatterForjsonDateStringFromNSDate
    {
        if (_dateFormatter_en_US_POSIX){
            return _dateFormatter_en_US_POSIX;
        }
        _dateFormatter_en_US_POSIX = [[NSDateFormatter alloc] init];
        NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
        [_dateFormatter_en_US_POSIX setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'"];
        [_dateFormatter_en_US_POSIX setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
        [_dateFormatter_en_US_POSIX setLocale:enUSPOSIXLocale];
        return _dateFormatter_en_US_POSIX;
    }

-(NSDate*) dateWithJSONString:( NSString*) dateStr
{
    NSDateFormatter *dateFormatter = [self dateFormatterForjsonDateStringFromNSDate];
    return [dateFormatter dateFromString:dateStr];
}

然后改变:

 [_datearray addObject:[[json objectAtIndex:i] valueForKey:@"Date"]];

收件人:

 [_datearray addObject:[self dateWithJSONString:[[json objectAtIndex:i] valueForKey:@"Date"]]];

【讨论】:

  • 日期格式错误 -- 应为“MM/dd/yy”。
  • 我的数据存储在mongodb中。数据通过 mongoosejs 放在我的 nodejs 应用程序中。 JSON 格式的日期如下所示:reedited (String) = 2014-01-11T02:41:37.684Z 为什么建议 MM/DD/YY?
  • 因为根据 OP 的评论,传入的数据是“MM/dd/yy”(与“MM/DD/YY”相同)。并且格式需要与它将读取的数据相匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 2014-10-10
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多