将JSON源解析为iPhone应用程序

3

这不是有效的JSON输入。如果您删除前导jsonFlickrFeed(和尾随),它可能会变成有效的JSON输入。当使用JSON解析器时遇到问题,请通过http://jsonlint.com/检查您的JSON输入是否有效。 - user557219
我尝试了JSONLint...即使是有效的JSON源,它也显示错误...不管怎样,谢谢你...我在想...可能是括号的问题...无论如何,我会再试一次。 - kingston
我从未遇到过jsonlint.com无法验证有效数据的情况。你不仅需要删除括号,还必须删除 jsonFlickrFeed - user557219
我无法修改它,因为文件在服务器上..有没有办法去掉括号或其他任何方式将不胜感激 - kingston
1个回答

8
您的响应数据不是有效的JSON,因为Flickr API返回了jsonFlickrFeed()回调。为了获得有效的JSON,请在查询中添加nojsoncallback=1。使用您的示例,相应的URL如下: http://api.flickr.com/services/feeds/photos_public.gne?tags=hackdayindia&lang=en-us&format=json&nojsoncallback=1 如果您在http://jsonlint.com中使用上述URL的响应,它将告诉您它是有效的JSON。 nojsoncallbackhttp://www.flickr.com/services/api/response.json.html中有说明。
快速阅读响应的示例。 JSON字符串的顶层元素是对象,通常由JSON解析器映射到字典:
// Obtain the JSON string from Flickr API
NSString *jsonString = …;

// Parse the JSON string into a dictionary
// (in this example, via SBJSON)
NSDictionary *responseObject = [jsonString JSONValue];

// The dictionary has an entry called "items", which is an array
NSArray *items = [responseObject objectForKey:@"items"];

// Iterate over the items. Each item is an object, hence a dictionary
for (NSDictionary *item in items) {
    // Each item dictionary has an entry called "author_id", which is a string
    NSString *authorId = [item objectForKey:@"author_id"];

    // Log the author id
    NSLog(@"author_id = %@", authorId);
}

你能告诉我你是如何修改上面的代码并将其放回服务器的吗?我是个新手。 - kingston
@user 我在阅读了Flickr API页面有关JSON响应的内容后,已将 &nojsoncallback=1 添加到您的原始URL中。 Flickr服务器会测试URL是否包含 nojsoncallback=1,如果包含,则会删除包装JSON响应的回调函数。 - user557219
@Bavarious:我能够在模拟器中获取解析后的JSON源,但是仍然在items数组中有(..)剩余部分。我已经在上面标记了我的打印屏幕,请问你能帮我解决吗? - kingston
@Bavarious:经过2到3次尝试,它成功了...谢谢啊...很愉快....将来一定会帮助我的。 - kingston
@user 你能解决公共flickr feed的问题吗?即使添加了nojsoncallback=1,它仍然间歇性地工作。我不得不将响应放入jsonlint中,并在特定键值对(例如“description”,“title”和“author”)处指出问题,一旦我删除这些行,它就变得有效!此外,它不会针对这3个字段中数组中的每个对象进行指向... - EmbCoder
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接