使用目标 C 从 url 检索 JSON [已关闭]

retriving JSON from a url using objective C [closed]

提问人:Ammar 提问时间:11/12/2013 更新时间:11/13/2013 访问量:6518

问:


要求代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试的解决方案、它们不起作用的原因以及预期的结果。Смотритетакже: Stack Overflow 问题清单

10年前关闭。

我是objectiveC的新手, 我在从 url 检索 JSON 类型时遇到问题,url 表示一个 Web 服务,该服务已构建为同时返回 JSON 和 XML,当我尝试从 url 使用 Web 服务时,结果是 XML, 我需要的是确定请求中返回数据的数据类型为 JSON。 顺便说一句,我确信Web服务同时返回XML和JSON。

这是我获得XML的代码:

NSURL *url = [[NSURL alloc] initWithString:@"http://192.168.1.1:8080/test2/eattel/restaurants"];
NSString *result=[[NSString alloc] initWithContentsOfURL:url];
NSLog(@"%@",result);

结果是:

   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <restaurantImpls>
<Resstaurant Name="Abo Alshamat" PhoneNumber="0991992994" MobileNumber="0991992993" LastName="Shame" ID="1" FirstName="Samer"/>
<Resstaurant Name="AL-Kamal" PhoneNumber="0992993995" MobileNumber="0992993994" LastName="Ali" ID="2" FirstName="Ahmad"/>
<Resstaurant Name="Abo-MAhmoud" MobileNumber="0993377800" ID="12"/>
<Resstaurant Name="Four Season" PhoneNumber="0993994996" MobileNumber="0993994995" LastName="Ammar" ID="3" FirstName="William"/>
<Resstaurant Name="uuuuu" MobileNumber="0999555777" LastName="William" ID="20" FirstName="Ammar"/>
<Resstaurant Name="NewOneFromI2" MobileNumber="0999888777" ID="18"/>
<Resstaurant Name="JOURY" PhoneNumber="0999999998" MobileNumber="0999998997" ID="4"/>
<Resstaurant Name="TestTestRestaurant,Ammar,Hamed" MobileNumber="202020" ID="19"/>
</restaurantImpls>

感谢您抽出宝贵时间接受采访。

iOS

评论

0赞 Suhit Patil 11/12/2013
stackoverflow.com/questions/11323326/......
0赞 Ammar 11/12/2013
感谢您的回复,但不幸的是,我的问题不是关于XML解析的,如果您请重新阅读该问题
0赞 manujmv 11/12/2013
谁处理服务器端编码?
0赞 trojanfoe 11/12/2013
我不明白你期望如何回答这个问题。每个服务器都是唯一的,如何获得 JSON 响应并不是本网站的常识。
0赞 Suhit Patil 11/12/2013
Web 服务可以同时返回 XML 和 JSON,您需要与服务器端程序员进行通信,以了解哪个响应来自服务器,并相应地在客户端对其进行解析。

答:

3赞 manujmv 11/12/2013 #1

我们无法从请求中设置响应数据类型。响应是从服务器设置的。从您的描述(Web 服务返回 XML 和 JSON),我的猜测是您需要发布一个显示返回状态的状态变量,例如 .这只是我的猜测。您需要联系服务器端程序员了解此请求的实现。isXML

编辑试试下面的代码

responseData = [[NSMutableData alloc]init];
NSURL *url = [[NSURL alloc] initWithString:@"http://192.168.1.1:8080/test2/eattel/restaurants"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"application/json" forHTTPHeaderField:@"accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
(void)[NSURLConnection connectionWithRequest:req delegate:self];

然后,您需要实现 NSURLConnection 委托。

#pragma mark - NSURLConnection Delegates

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  {

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response   {
    [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  {
    [responseData appendData:data]; 
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection    {

    NSString *responseString = [[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",responseString);

}

评论

0赞 Ammar 11/12/2013
我可以为您解释更多,服务器已经测试了 android 应用程序,默认情况下它会将 JSON 返回到 Android 应用程序,但是在我的 iPhone 应用程序中,当我尝试获取 resault 时,它是 XML 格式,然后谁确定 retutn 类型?
1赞 manujmv 11/12/2013
您确定Android应用程序中没有发布变量吗?
0赞 Ammar 11/13/2013
@manujmv先生,在我如此 android 代码之后,我认为有 postingvariables,但我不知道如何使用目标 C 对其进行编码,这是 android 代码: DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);HttpGet getRequest = new HttpGet(getBase() + str);getRequest.addHeader(“接受”, “application/json”);HttpResponse 响应 = httpClient.execute(getRequest);结果 = getResult(response).toString();'
1赞 manujmv 11/13/2013
@Ammar:请找到我编辑的答案
1赞 manujmv 11/13/2013
_parserSource 是我的委托对象。你不需要那个。只需将其删除即可。你在 connectionDidFinishLoading 的 responseString 中得到响应