注册 登录
主题 : Json解析问题
级别: 侠客
状态: 连续签到 - [15天]
UID: 634128
精华: 0
发帖: 65
可可豆: 353 CB
威望: 317 点
在线时间: 156(时)
注册时间: 2018-02-08
最后登录: 2018-08-17
0 楼:  发表于: 2018-02-12 20:58    发自: Web Page
来源于 一般提问 分类

Json解析问题   

下面的Json是聚合数据上关于天气API中的一段,有个疑问,key为future解析出来的难道不是一个包含7个字典的数组吗?Xcode告诉我这是future解析出来的是一个字典。我想了半天也没想明白,求大佬解答。

"future": [    /*未来几天天气*/
            {
                "temperature": "28℃~36℃",
                "weather": "晴转多云",
                "weather_id": {
                    "fa": "00",
                    "fb": "01"
                },
                "wind": "南风3-4级",
                "week": "星期一",
                "date": "20140804"
            },
            {
                "temperature": "28℃~36℃",
                "weather": "晴转多云",
                "weather_id": {
                    "fa": "00",
                    "fb": "01"
                },
                "wind": "东南风3-4级",
                "week": "星期二",
                "date": "20140805"
            },
            {
                "temperature": "27℃~35℃",
                "weather": "晴转多云",
                "weather_id": {
                    "fa": "00",
                    "fb": "01"
                },
                "wind": "东南风3-4级",
                "week": "星期三",
                "date": "20140806"
            },
            {
                "temperature": "27℃~34℃",
                "weather": "多云",
                "weather_id": {
                    "fa": "01",
                    "fb": "01"
                },
                "wind": "东南风3-4级",
                "week": "星期四",
                "date": "20140807"
            },
            {
                "temperature": "27℃~33℃",
                "weather": "多云",
                "weather_id": {
                    "fa": "01",
                    "fb": "01"
                },
                "wind": "东北风4-5级",
                "week": "星期五",
                "date": "20140808"
            },
            {
                "temperature": "26℃~33℃",
                "weather": "多云",
                "weather_id": {
                    "fa": "01",
                    "fb": "01"
                },
                "wind": "北风4-5级",
                "week": "星期六",
                "date": "20140809"
            },
            {
                "temperature": "26℃~33℃",
                "weather": "多云",
                "weather_id": {
                    "fa": "01",
                    "fb": "01"
                },
                "wind": "北风4-5级",
                "week": "星期日",
                "date": "20140810"
            }
        ]


关键词: json
级别: 圣骑士
状态: 连续签到 - [62天]
UID: 510329
精华: 0
发帖: 504
可可豆: 816 CB
威望: 688 点
在线时间: 857(时)
注册时间: 2015-09-30
最后登录: 2018-08-02
1 楼:  发表于: 2018-02-13 09:06    发自: Web Page
是数组,不要有疑问,直接赋予数组久行了,难道报空?
级别: 侠客
状态: 连续签到 - [5天]
UID: 602644
精华: 0
发帖: 211
可可豆: 333 CB
威望: 329 点
在线时间: 645(时)
注册时间: 2017-01-04
最后登录: 2018-08-17
2 楼:  发表于: 2018-02-13 09:30    发自: Web Page
回 楼主(ElvisWee) 的帖子
是数组,看你模型层怎么定义了
锤石没有什么1个Q解决不了的,如果有那就两个Q
级别: 侠客
状态: 连续签到 - [15天]
UID: 634128
精华: 0
发帖: 65
可可豆: 353 CB
威望: 317 点
在线时间: 156(时)
注册时间: 2018-02-08
最后登录: 2018-08-17
3 楼:  发表于: 2018-02-13 15:37    发自: Web Page
回 1楼(564282030) 的帖子
具体情况是这样的:

if ([_Future isKindOfClass:[NSDictionary class]]) {  //id Future
        _array =[_Future objectForKey:@"future"];  //用数组array接受key为future的值;  
        for (int i = 0; i<_array.count; i++) {
            _dicFuture =[_array objectAtIndex:i];  //遍历数组array中的元素用 字典dicFuture接收;   array和dicFuture我在.h里查过了,分别是数组类     和字典类。
        }
    }
下面是Xcode的报错信息:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI objectAtIndex:]: unrecognized selector sent to instance 0x6040001bf800'    
意思应该是array为字典无法调用objectAtIndex方法。


然后我检验用下面这段输出的是结果是array为字典。
  if ([_Future isKindOfClass:[NSDictionary class]]) {  //id Future
        _array =[_Future objectForKey:@"future"];  //用数组array接受key为future的值;
        if ([_array isKindOfClass:[NSArray class]]) {
            NSLog(@"array为数组");
        }
        if ([_array isKindOfClass:[NSDictionary class] ]) {
            NSLog(@"array为字典");
        }
    }
级别: 侠客
状态: 连续签到 - [15天]
UID: 634128
精华: 0
发帖: 65
可可豆: 353 CB
威望: 317 点
在线时间: 156(时)
注册时间: 2018-02-08
最后登录: 2018-08-17
4 楼:  发表于: 2018-02-13 15:39    发自: Web Page
回 2楼(yejinghun) 的帖子
大佬有空看下我的新回复(在3L),
级别: 精灵王
状态: 连续签到 - [1天]
UID: 140609
精华: 0
发帖: 1061
可可豆: 1280 CB
威望: 1278 点
在线时间: 3219(时)
注册时间: 2012-05-04
最后登录: 2018-08-17
5 楼:  发表于: 2018-02-13 16:05    发自: Web Page
回 4楼(ElvisWee) 的帖子
无论是什么类型,你先打印[_Future objectForKey:@"future"]看下,然后再一层层深入解析,有可能它确实是一个字典,但却只有一个元素,包含了你要的那个数组
级别: 圣骑士
状态: 连续签到 - [62天]
UID: 510329
精华: 0
发帖: 504
可可豆: 816 CB
威望: 688 点
在线时间: 857(时)
注册时间: 2015-09-30
最后登录: 2018-08-02
6 楼:  发表于: 2018-02-13 16:09    发自: Web Page
回 3楼(ElvisWee) 的帖子
给你写个model吧,
直接
#import "RootClass.h"
然后
RootClass *fuData = [[RootClass alloc]initWithDictionary:launchOptions];
    NSArray *futureArr = fuData.future;
    Future *future1 = futureArr[0];
    NSLog(@"--1--%@",future1);
    //或者
    for (Future *model in futureArr) {
        NSLog(@"--1--%@",model);
    }

想干嘛自己写吧
附件: futureModel.zip (6 K) 下载次数:0
级别: 侠客
状态: 连续签到 - [15天]
UID: 634128
精华: 0
发帖: 65
可可豆: 353 CB
威望: 317 点
在线时间: 156(时)
注册时间: 2018-02-08
最后登录: 2018-08-17
7 楼:  发表于: 2018-02-13 21:49    发自: Web Page
回 5楼(kaka_007) 的帖子
谢谢大佬提醒,不管怎么样我都应该先打印看一下的。打印出来的的确是一个字典。和聚合数据网站上给的返回样式不同,(可能后台改过了,网站还没更新吧)。
级别: 骑士

状态: 连续签到 - [3天]
UID: 303820
精华: 0
发帖: 306
可可豆: 483 CB
威望: 436 点
在线时间: 2877(时)
注册时间: 2014-03-28
最后登录: 2018-08-17
8 楼:  发表于: 2018-02-22 17:04    发自: Web Page
实际返回数据跟聚合数据文档提供的数据示例不一致,不要太相信文档,还是得以得到的实际数据为准!
级别: 侠客
状态: 连续签到 - [15天]
UID: 634128
精华: 0
发帖: 65
可可豆: 353 CB
威望: 317 点
在线时间: 156(时)
注册时间: 2018-02-08
最后登录: 2018-08-17
9 楼:  发表于: 2018-02-24 00:07    发自: Web Page
回 8楼(威猛de小狮子) 的帖子
嗯嗯,谢谢各位的无私帮助。
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部