IOS:从URL获取JSON响应

时间:2014-02-14 06:34:20

标签: ios json

我正在尝试从此link获取数据并将其存储在NSArray

回复格式:

data(
[
"Mumbai, MH, India",
"Mumford, NY, United States",
"Mumford, TX, United States",
"Navi Mumbai, MH, India",
"New Mumbai, MH, India"
]
)

尝试像常规的JSON响应,但没有获得任何数据。

请帮帮我......

提前致谢。

7 个答案:

答案 0 :(得分:2)

在你的php中可能是返回数组值。所以不要使用json_encode并返回值的JSON表示。

并使用Objective-C代码,如

 NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

答案 1 :(得分:2)

我认为这可能是问题..

具有数组响应的JSON将是[x,x,x,x,x] .. 但你的json是数据([x,x,x,x,x]);这就是为什么你没有在jsonserialization中得到正确的答案。

NSArray *response = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

具有字典响应的JSON将是{key = data,key = data,key = data}

NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

当您尝试转换

时,您的json会收到以下错误
(JSON text did not start with array or object and option to allow fragments not set.)

你的json不符合这两种格式。你能检查一下吗?试试

答案 2 :(得分:2)

  

http://gd.geobytes.com/AutoCompleteCity?callback=data&q=mum

这是一个JSONP响应,它在回调函数data中包装了json响应。

删除callback参数并尝试再次解析

  

http://gd.geobytes.com/AutoCompleteCity?q=mum

另请参阅:What is JSONP all about?

答案 3 :(得分:1)

我的眼睛看起来不像JSON那样,但是你可以把这个输入传递给NSJSONSerializer(我在考虑JSONObjectWithData:options:error: API)并得到一个Objective-C对象出来了

答案 4 :(得分:1)

尝试使用以下代码

NSString *jsonString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
NSMutableDictionary *jsonDictionary  = [jsonString JSONValue];
NSLog(@"%@", jsonDictionary);

答案 5 :(得分:1)

你可以尝试这段代码..这不是完美的..但你可以在这里检索数据。

NSError *err = Nil;
NSURL *url = [NSURL URLWithString:@"http://gd.geobytes.com/AutoCompleteCity?callback=data&q=mum"];
    NSData *data1 = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&err];
    NSLog(@"%@",data1);
    NSString *json_string = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
    NSLog(@"%@",json_string);
    NSString *json = [json_string substringFromIndex:4];
    NSLog(@"%@",json);
    NSCharacterSet *charsToTrim = [NSCharacterSet characterSetWithCharactersInString:@"()"];
    NSString *json1 = [json stringByTrimmingCharactersInSet:charsToTrim];
    NSLog(@"%@",json1);
    if ([json1 length]> 0)
        {
        json1 = [json1 substringToIndex:[json1 length]-2];
    }
    NSLog(@"returnResponse %@",json1);
    NSMutableArray *a = [[NSMutableArray alloc]init];
    [a addObject:[json1 componentsSeparatedByString:@","]];
    NSLog(@"%@",a);
    NSLog(@"%@",[a objectAtIndex:0]);

答案 6 :(得分:1)

我认为符合JSON资格的JSON字符串的响应字符串将如下所示

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d",
    "e": "f"
  },
  "string": "Hello World"
}

确保从服务获得的响应是​​JSON字符串