远程json格式数据的读取

  远程JSON格式数据的读取 以及远程数据服务的搭建。

从最初的后台搭建到IPHONE客户端代码的编写、数据的访问都一一呈现。

1:后台数据的搭建

1.1:在IIS上创建一个虚拟目录

1.2:使用VS创建一个Web应用程序,这里我使用的是VS2008IDE

1.3:向工程中添加一个扩展名称为ashx的文件,我们就是使用这个文件来提供JSON数据访问服务。

1.4:然后运行程序,确保该文件可用。

1.5:编写后台代码,参考代码如下所示:

这个后代的代码,是我参考一个网友写的,并做了部分的修改,地址如下所示:

http://www.cnblogs.com/xinjian/archive/2010/11/23/1885225.html

<%@ WebHandler Language="C#" Class="indexHandler" %>

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Web.Script.Serialization;

public class indexHandler : IHttpHandler

{

    public void ProcessRequest(HttpContext context)

    {

        context.Response.ContentType = "text/plain";

        //初始化数据

        List<People> peopleList = new List<People>();

        for (int i = 0; i < 10; i++)

        {

            People people = new People() {Name = "name" + i };

            peopleList.Add(people);

        }

        //引用System.Web.Extensions  .net3.5框架

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        //转换

        var jsonData = serializer.Serialize(peopleList);

        string result = "{\"" + "data" + "\":";

        result += jsonData;

        result += "}";

        //返回

        context.Response.Write(result);//返回请求的JSON数据字符串

    }

    public class People//定义一个数据Model,这里仅仅是定义一个属性,当然我们是可以定义多个属性的。

    {

        public string Name

        {

            set;

            get;

        }

    }

    

    public bool IsReusable

    {

        get

        {

            return false;

        }

    }

}

运行效果如下所示,这个是打印到页面的效果

{"data":[{"Name":"name0"},{"Name":"name1"},{"Name":"name2"},{"Name":"name3"},{"Name":"name4"},{"Name":"name5"},{"Name":"name6"},{"Name":"name7"},{"Name":"name8"},{"Name":"name9"}]}

第二部分:IPHONE前端代码的编写

2:IPHONE前台代码的访问

2.1:打卡XBOX创建的工程,添加一个类文件,名称为:HttpConnection的文件

添加如下所示的代码:

//

//  HttpConnection.h

//  GIITicket

//

//  Created by infohold infohold_Mac3 on 11-8-15.

//  Copyright 2011 __MyCompanyName__. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "HttpConnectionDelegate.h"

/*

数据访问接口类

主要提供访问后台数据的服务

create data 2011-08-15

*/

@interface HttpConnection : NSObject //这里继承与 NSObject类,

{

    NSMutableData *_buf;

    id<HttpConnectionDelegate> connectionDelegate;//定义一个委托变量,用来访问数据

    BOOL _isHttpResponseOK;

}

#pragma mark --

#pragma mark property

#pragma mark --

@property(nonatomic,retain) id<HttpConnectionDelegate> connectionDelegate;

#pragma mark --

#pragma mark IBAction

#pragma mark --

-(void)Send:(NSString *)url;

@end

2.2:新建一个名称为HttpConnectionDelegate.h的协议(委托)文件,并添加如下所示的代码

#import <UIKit/UIKit.h>

@protocol HttpConnectionDelegate

@optional

@optional

-(void)onRecivedData:(NSData *)data;

-(void)onRecivedDataError:(NSData *)data;

@end

2.3:调用这个数据反问类对象

我们在一个需要读取数据的地方调用该类对象

参考代码如下所示:

-(IBAction)Go

{

NSString *url = @"http://YourIPAddress/GIITicketServer/indexHandler.ashx";//我们搭建的后台数据服务地址,

[request Send:url];

}

-(void)onRecivedData:(NSData *)data//接受到数据后触发的函数,也可以说成是数据的解析

{

CJSONDeserializer *jsonDeserializer=[CJSONDeserializer deserializer];

NSError *error=nil;

NSDictionary *resultDictionary=[jsonDeserializer deserialize:data error:error];

if (error) 

{

return nil;

}

NSArray *tt = [resultDictionary objectForKey:@"data"];

NSDictionary *keyValue  = [tt objectAtIndex:0];

NSString *ttt = [keyValue objectForKey:@"Name"];//第一个键值对的名称名称  “name0”

}

PS:该篇博客仅仅是写了一个大概,有些细节的东西我就省略掉了,但是这个并不能说明这些细节的东西不重要。

另外,这里仅仅是写到如何显示从远程读取的数据,这个需要在调试的状态下才能看到。

如果有什么不理解的地方请联系我,交流!

THE END !

原文地址:https://www.cnblogs.com/xingchen/p/2139507.html