josn数据的解析呀呀呀。

简单地说就是我做的一个登录验证从网站返回的数据,我现在要把数据解析出来但是我不会呀。.h文件为#import
#import "JSONKit.h"
@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *username;

@property (weak, nonatomic) IBOutlet UITextField *pwd;

  • (IBAction)signin:(id)sender;

@end

.m文件为
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

-(BOOL)textFieldShouldReturn:(UITextField*)textField{

[textField resignFirstResponder];
return YES;

}

  • (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

  • (IBAction)signin:(id)sender {

    NSString*username=self.username.text;
    NSString*pwd=self.pwd.text;
    NSString *str =[NSString stringWithFormat:@"ActionCode=0x2001&parameter=pwd###%@#####userNo###%@&LoginID=&LoginIp=",pwd,username];//设置参数

    NSString *encodedValue = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSString*str2=[NSString stringWithFormat:@"http://14.17.84.128:8088/wcf/ActionService.svc/action/web/get/do?%@",encodedValue];

    NSURL*url=[NSURL URLWithString:str2];

    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)

    //第三步,连接服务器

    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString *str3 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];

    // NSLog(@"%@",str2);

    NSLog(@"%@",str3);

    }

@end接受到的数据为2015-08-10 21:36:37.038 百汇百通[626:6884] {"ErrorCode":0,"Exception":null,"IsCompleted":true,"Result":"{\"CompanyCode\":\"100000\",\"CompanyID\":\"1\",\"CompanyName\":\"百汇百通位置服务平台\",\"DataRights\":\"ALL\",\"GprsPort\":\"\",\"GpsDeviceNo\":\"\",\"GpsDeviceType\":\"\",\"LicensePlate\":\"\",\"Privileges\":\"ALL\",\"Result\":\"0\",\"RoleID\":\"1\",\"RoleName\":\"系统管理员\",\"SimcardNo\":\"\",\"UserName\":\"超级管理员\",\"UserType\":\"1\",\"VehicleID\":\"\"}"}大神告诉我如何解析并提取键值呀。

4个回答

NSDictionary *dict=[NSJSONSerialization JSONObjectWithData: received options:NSJSONReadingMutableLeaves error:nil];

recieved 为你接收到的NSData类型。

通过dict[@"ErrorCode"],dict[@"IsCompleted"]等来提取;

我发现 键 result对应好像还是一个JSON数据,所以要再次解析出来

NSDictionary *res=dict[@"Result"];
然后再取Result里的键值。比如:
NSString *company_code =res[@"CompanyCode"];
NSString *company_name=res[@"CompanyName"];

你先试试吧,不行的话你再找我。

weixin_30260663
苏打熊 我又测试了一下,在没有写入最后的两行代码 NSString*Company_code=res[@"CompanyCode"]; NSString*Company_name=res[@"CompanyName"]; 是不会报错的,只要加进去这两行就开始报错了。
4 年多之前 回复
weixin_30260663
苏打熊 控制台里面是这样子打印的,我截取一部分。 -[__NSCFStriing objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7fe56a606350 2015-08-11 09:52:43.197 百汇百通[768:9824] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7fe56a606350'
4 年多之前 回复
weixin_30260663
苏打熊 这些代码是直接写到button的方法里是吧,我写完之后运行,点击按钮就会跳转到main.m里面,显示的错误是 Thread 1: signal SIGABRT 这个是什么情况该怎么解决呀。
4 年多之前 回复

大神怎么还没来~迫不及待的等大神解决。

jfr0524
jfr0524 前面是key值 后面是value值 我也是上个礼拜新学的
4 年多之前 回复
jfr0524
jfr0524 josn就是键值对 通常是有数组和字典组成的
4 年多之前 回复

NSDictionary *dict=[NSJSONSerialization JSONObjectWithData: received options:NSJSONReadingMutableLeaves error:nil];

recieved 为你接收到的NSData类型。

通过dict[@"ErrorCode"],dict[@"IsCompleted"]等来提取;

我发现 键 result对应好像还是一个JSON数据的字符串,所以要再次解析出来**(我上次以为Result对应的是json,你的程序对应的是JSON字符串,要转化为JSON)**

NSString *result=dict[@"Result"];

NSData *jsonData = [result dataUsingEncoding:NSUTF8StringEncoding];

NSError *err;

NSDictionary *res = [NSJSONSerialization JSONObjectWithData: jsonData options:NSJSONReadingMutableContainers error:&err];

if(err) {

NSLog(@"json解析失败:%@",err);

}

NSString *company_code =res[@"CompanyCode"];
NSString *company_name=res[@"CompanyName"];

weixin_30260663
苏打熊 好了,我发现其实是用错了。。sorry。
4 年多之前 回复
weixin_30260663
苏打熊 还有就是在 NSDictionary*res=[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:err]; 这提示 implicit conversion of an objectivec pointer to 'NSError*--autoreleasing*'is ARC
4 年多之前 回复
weixin_30260663
苏打熊 按你的输入拉,在代码 NSData*jsonData=[result dataUsingEncoding:NSUTF8StringEncoding]; 这里出现了错误提示是NO visible @interface for "NSdictionary" declares the selector 'dataUsingEncoding'
4 年多之前 回复

NSDictionary *dict=[NSJSONSerialization JSONObjectWithData: received options:NSJSONReadingMutableLeaves error:nil];

recieved 为你接收到的NSData类型。

通过dict[@"ErrorCode"],dict[@"IsCompleted"]等来提取;

我发现 键 result对应好像还是一个JSON数据的字符串,所以要再次解析出来**(我上次以为Result对应的是json,你的程序对应的是JSON字符串,要转化为JSON)**

NSString *result=dict[@"Result"];

NSData *jsonData = [result dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *res = [NSJSONSerialization JSONObjectWithData: jsonData options:NSJSONReadingMutableLeaves error:nil];

NSString *company_code =res[@"CompanyCode"];
NSString *company_name=res[@"CompanyName"];

不好意思,是我大意了,你试试这样,不行的话再call我。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问