iOS解析Server端返回JSON数据

在做quhao APP架构时,后台Server端使用了Java,提供WebService,而iOS和Android作为移动客户端。在做数据交互时,Server端返回JSON格式数据。由于iOS SDK中提供的JSON数据解析实在太过麻烦,这里讲下iOS下如何使用SBJson库来解析JSON格式数据。

首先我发起了一个HTTP请求,得到一个response字符串,此字符串是JSON格式:

NSURL *url = [NSURL URLWithString:@"http://192.168.1.2:9081/allCategories"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request startSynchronous];
    NSError *httpError = [request error];
    NSString *response = @"";
    if (!httpError) {
        response = [request responseString];
//        NSLog(@"%@", response);
    }

返回的数据格式如下:

[{"count":1000,"cateType":"benbangcai"},{"count":478,"cateType":"hanguoliaoli"},{"count":999,"cateType":"huoguo"},{"count":1000,"cateType":"mianbaodangao"},{"count":998,"cateType":"ribenliaoli"},{"count":1000,"cateType":"tianpinyinpin"},{"count":584,"cateType":"xiangcai"},{"count":999,"cateType":"chuancai"},{"count":260,"cateType":"dongnanyacai"},{"count":311,"cateType":"haixian"},{"count":1000,"cateType":"shaokao"},{"count":984,"cateType":"xiaochikuaican"},{"count":999,"cateType":"xican"},{"count":210,"cateType":"xinjiangqingzhen"},{"count":771,"cateType":"yuecaiguan"},{"count":1000,"cateType":"zhongcancaixi"},{"count":316,"cateType":"zizhucan"}]

我们可以看到JSON数据格式是非常整齐的,下面我们就使用SBJson来解析每一个数据块的2个值:count和cateType。

// 解析Server端返回的JSON数据
    SBJsonParser *jsonParser = [[SBJsonParser alloc] init]; //初始化SBJsonParser
    NSError *error = nil;
    NSArray *jsonObjects = [jsonParser objectWithString:response error:&error];
    [jsonParser release], jsonParser = nil;

    for (NSDictionary *dict in jsonObjects) {
        NSString *value1 = [dict objectForKey:@"cateType"];
        NSString *value2 = [dict objectForKey:@"count"];
        NSLog(@" value1 is : %@", value1);
        NSLog(@" value2 is : %@", value2);
    }

运行后打印结果:

2013-07-23 21:16:28.962 quhaoIOS[832:c07]  value1 is : benbangcai
2013-07-23 21:16:28.962 quhaoIOS[832:c07]  value2 is : 1000
2013-07-23 21:16:28.963 quhaoIOS[832:c07]  value1 is : hanguoliaoli
2013-07-23 21:16:28.963 quhaoIOS[832:c07]  value2 is : 478
2013-07-23 21:16:28.963 quhaoIOS[832:c07]  value1 is : huoguo
2013-07-23 21:16:28.963 quhaoIOS[832:c07]  value2 is : 999
2013-07-23 21:16:28.964 quhaoIOS[832:c07]  value1 is : mianbaodangao
2013-07-23 21:16:28.964 quhaoIOS[832:c07]  value2 is : 1000
2013-07-23 21:16:28.964 quhaoIOS[832:c07]  value1 is : ribenliaoli
2013-07-23 21:16:28.964 quhaoIOS[832:c07]  value2 is : 998
2013-07-23 21:16:28.965 quhaoIOS[832:c07]  value1 is : tianpinyinpin
2013-07-23 21:16:28.965 quhaoIOS[832:c07]  value2 is : 1000
2013-07-23 21:16:28.965 quhaoIOS[832:c07]  value1 is : xiangcai
2013-07-23 21:16:28.966 quhaoIOS[832:c07]  value2 is : 584
2013-07-23 21:16:28.966 quhaoIOS[832:c07]  value1 is : chuancai
2013-07-23 21:16:28.966 quhaoIOS[832:c07]  value2 is : 999
2013-07-23 21:16:28.966 quhaoIOS[832:c07]  value1 is : dongnanyacai
2013-07-23 21:16:28.967 quhaoIOS[832:c07]  value2 is : 260
2013-07-23 21:16:28.967 quhaoIOS[832:c07]  value1 is : haixian
2013-07-23 21:16:28.967 quhaoIOS[832:c07]  value2 is : 311
2013-07-23 21:16:28.967 quhaoIOS[832:c07]  value1 is : shaokao
2013-07-23 21:16:28.968 quhaoIOS[832:c07]  value2 is : 1000
2013-07-23 21:16:28.968 quhaoIOS[832:c07]  value1 is : xiaochikuaican
2013-07-23 21:16:28.968 quhaoIOS[832:c07]  value2 is : 984
2013-07-23 21:16:28.969 quhaoIOS[832:c07]  value1 is : xican
2013-07-23 21:16:28.969 quhaoIOS[832:c07]  value2 is : 999
2013-07-23 21:16:28.969 quhaoIOS[832:c07]  value1 is : xinjiangqingzhen
2013-07-23 21:16:28.969 quhaoIOS[832:c07]  value2 is : 210
2013-07-23 21:16:28.970 quhaoIOS[832:c07]  value1 is : yuecaiguan
2013-07-23 21:16:28.970 quhaoIOS[832:c07]  value2 is : 771
2013-07-23 21:16:28.970 quhaoIOS[832:c07]  value1 is : zhongcancaixi
2013-07-23 21:16:28.970 quhaoIOS[832:c07]  value2 is : 1000
2013-07-23 21:16:28.971 quhaoIOS[832:c07]  value1 is : zizhucan
2013-07-23 21:16:28.971 quhaoIOS[832:c07]  value2 is : 316

要将Java中的BufferedImage对象放入Map中返回iOS,可以使用以下步骤: 1. 创建一个Map对象,并将BufferedImage对象放入其中。 2. 将Map对象转换为JSON格式的字符串。 3. 使用HTTP协议将JSON字符串发送到iOS。 4. 在iOS接收HTTP响应中的JSON字符串,将其解析为NSDictionary对象,并从中获取BufferedImage对象。 以下是一个简单的示例代码: Java: ``` // 读取图片并转换为BufferedImage对象 BufferedImage image = ImageIO.read(new File("path/to/image.jpg")); // 创建一个Map对象,并将BufferedImage对象放入其中 Map<String, Object> map = new HashMap<>(); map.put("image", image); // 将Map对象转换为JSON格式的字符串 ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(map); // 将JSON字符串返回给客户 return jsonString; ``` iOS: ``` NSURL *url = [NSURL URLWithString:@"http://your-java-server.com/get-image"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { if (data) { // 解析JSON字符串为NSDictionary对象 NSError *error = nil; NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; // 从NSDictionary对象中获取BufferedImage对象 NSData *imageData = [[NSData alloc] initWithBase64EncodedString:jsonDict[@"image"] options:NSDataBase64DecodingIgnoreUnknownCharacters]; UIImage *image = [UIImage imageWithData:imageData]; // 在这里使用UIImage对象 } else { NSLog(@"%@", error); } }]; ``` 注意:在实际开发中,要考虑到JSON序列化和反序列化的效率,以及图片大小、网络传输速度等因素,以保证图片的快速加载和显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值