Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用字典解析JSON数组_Ios_Objective C_Json - Fatal编程技术网

Ios 使用字典解析JSON数组

Ios 使用字典解析JSON数组,ios,objective-c,json,Ios,Objective C,Json,我在获取JSON文件中想要的数据时遇到了一些问题。以下是我的控制台输出的缩短版本: { AUD = { 15m = "125.15547"; 24h = "124.74"; buy = "121.0177"; last = "125.15547"; sell = "123.44883"; symbol = "$"; }; BRL = { 15m

我在获取JSON文件中想要的数据时遇到了一些问题。以下是我的控制台输出的缩短版本:

{
    AUD =     {
        15m = "125.15547";
        24h = "124.74";
        buy = "121.0177";
        last = "125.15547";
        sell = "123.44883";
        symbol = "$";
    };
    BRL =     {
        15m = "120.34";
        24h = "120.34";
        buy = "120.34";
        last = "120.34";
        sell = "120.34";
        symbol = "R$";
    };
    CAD =     {
        15m = "129.08612";
        24h = "131.07";
        buy = "128.66227";
        last = "129.08612";
        sell = "129.08612";
        symbol = "$";
    };
}
我正在尝试使用内置的JSON解析库解析该文件。下面是我的
viewDidLoad
方法中的解析器:

    _tickerArray = [NSMutableArray array];

    NSURL *tickerDataURL = [NSURL URLWithString:@"https://blockchain.info/ticker"];
    NSData *jsonData = [NSData dataWithContentsOfURL:tickerDataURL];
    NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
    NSLog(@"%@", dataDictionary);
    NSArray *ar = [NSArray arrayWithObject:dataDictionary];
    for (NSString *key in [dataDictionary allKeys]) {
        for (NSDictionary *dict in ar) {
            TickerData *t;
            t.currency = [dict objectForKey:key];
            t.symbol = [dict objectForKey:@"symbol"];
            t.last = [dict objectForKey:@"last"];
            [_tickerArray addObject:t];
        }

    }
我想将货币代码(如
AUD或BRL
)与货币字典中包含的一些其他数据一起存储到
t.currency
,但现在我的应用程序正在崩溃。 错误代码:

NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
似乎没有任何对象添加到
\u tickerray

帮忙

编辑:使用填充其他字段的正确数据显示按键:

 NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
    NSLog(@"%@", dataDictionary);


    for (NSString *key in [dataDictionary allKeys]) {
        NSDictionary *dic=[dataDictionary objectForKey:key];
            TickerData *t=[[TickerData alloc] init];
            t.currency = key;//EDITED
            t.symbol = [dic objectForKey:@"symbol"];
            t.last = [dic objectForKey:@"last"];
            [_tickerArray addObject:t];

    }
试试看

NSURL *url = [NSURL URLWithString:@"https://blockchain.info/ticker"];

NSLog(@"API : %@",url);

NSMutableData *jsonData = [NSMutableData dataWithContentsOfURL:url];

NSString *data = [[NSString alloc] initWithBytes: [jsonData mutableBytes] length:[jsonData length] encoding:NSUTF8StringEncoding];

dictionary = [data JSONValue];
NSDictionary *dict = [dictionary objectForKey:@"AUD"];
NSLog(@"%@",dict);
NSString *last = [dict valueForKey:@"last"];
NSLog(@"%@",last);
您的数据不包含任何数组,它包含所有字典,请尝试上面的代码并查看注释

希望它能起作用

编辑:


是的,您也已经初始化了对象,正如上面在其他答案中所建议的那样。

t
为零,您必须分配/初始化它:

TickerData *t = [[TickerData alloc] init];

它似乎比我的代码工作得更好。虽然我现在得到一个错误:无法识别的选择器被发送到实例0x7184550,该实例为
dict
,根据我的控制台,该实例从JSON文件调试中的
15m
获取其值并尝试更正,但我的代码未经测试。。但是,您的代码无法执行您正在尝试执行的操作..+1!小更正:
t.currency=[dict-objectForKey:key]
可能应该是
t.currency=[dict-objectForKey:@“symbol”]
@MartinR,但我试图将顶级字典名放入
t.currency
而不是符号。由于某些原因,我仍然无法获取要在表中显示的数据。但是,它确实显示在我的console@iphonic最后一次编辑成功了!该键现在显示在我的表中。非常感谢你!这不会导致撞车,这很好。但由于某些原因,我在TableView中放置的标签似乎都没有得到数据。但是,由于我在for语句之外添加了一个
NSLOG
,所有内容都正确地显示在我的控制台中。谢谢
TickerData *t = [[TickerData alloc] init];