在 iOS 的 RestKit 中解析嵌套的 JSON
Posted
技术标签:
【中文标题】在 iOS 的 RestKit 中解析嵌套的 JSON【英文标题】:Parsing nested JSON in RestKit for iOS 【发布时间】:2014-12-07 23:22:44 【问题描述】:这是我要解析的 JSON:http://query.yahooapis.com/v1/public/yql?q=select%20Name,LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20('YHOO','AAPL','GOOG','MSFT')&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
(我在这里无法正确格式化,所以我提供了一个链接。)
"query":
"count": 4,
"created": "2014-12-08T02:46:32Z",
"lang": "en-US",
"results":
"quote": [
"LastTradePriceOnly": "50.99",
"Name": "Yahoo! Inc."
,
"LastTradePriceOnly": "115.00",
"Name": "Apple Inc."
,
"LastTradePriceOnly": "525.26",
"Name": "Google Inc."
,
"LastTradePriceOnly": "48.42",
"Name": "Microsoft Corpora"
]
我想从“报价”部分获取信息,但我不知道如何去那里。
这是我的代码:
func getSampleStocksFromYahoo(query:String, successBlock:StocksResponseSuccessBlock, failureBlock:StocksResponseFailureBlock)
let url = NSURL(string:query)
let urlRequest = NSURLRequest(URL: url!)
var stockMapping:RKObjectMapping = RKObjectMapping(forClass:Stock.self)
stockMapping.addAttributeMappingsFromDictionary(["Name":"name"])
var rDescriptor:RKResponseDescriptor = RKResponseDescriptor(mapping: stockMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: nil)
var request:RKObjectRequestOperation = RKObjectRequestOperation(request: urlRequest, responseDescriptors: [rDescriptor])
request.setCompletionBlockWithSuccess(successBlock, failure: failureBlock)
request.start()
如何设置我的映射,使其从“报价”部分开始?
【问题讨论】:
您提供的 XML 文件链接说它由于某种原因缺少一些参数。 嗨,肖恩,一半的链接不可点击。如果您可以复制并粘贴整个网址,它将起作用。 哇。抱歉,让我快速查看所有内容。我想我也忘了突出显示最后一个回调部分。 所以我知道该怎么做,但是我不能正确地将它移植到 Swift,因为我对这种语言不太了解?你想看看目标c代码吗? Objective-C 代码会非常好! 【参考方案1】:抱歉,因为我正在做某事,所以花了这么长时间才发布。你说 Objective-c 的答案可以代替 Swift,所以你去吧!
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://query.yahooapis.com/v1/public/yql?q=select%20Name,LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20('YHOO','AAPL','GOOG','MSFT')&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="]];
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler: ^(NSURLResponse *response, NSData *data, NSError *connectionError)
NSHTTPURLResponse *httpUrlResponse = (NSHTTPURLResponse*) response;
if (!connectionError && httpUrlResponse.statusCode == 200)
NSError *jsonError = nil;
NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
if (!jsonError)
NSArray *quotes = [[[responseDictionary objectForKey:@"query"] objectForKey:@"results"] objectForKey:@"quote"];
for (int index = 0; index < quotes.count; index++)
NSDictionary *quoteInformation = [quotes objectAtIndex:index];
NSLog(@"Name: %@", [quoteInformation objectForKey:@"Name"]);
NSLog(@"LastTradePriceOnly: %@", [quoteInformation objectForKey:@"LastTradePriceOnly"]);
];
【讨论】:
尽管这不是我想要的,因为这段代码不涉及 RestKit,但这个解决方案是完全可以接受的。我自己测试了代码,它运行良好。谢谢肖恩 没问题,如果你愿意,我可以制作一个 RestKit 版本。 如果您有时间并且不介意这样做,那将是非常棒的,我将非常感谢您的时间和精力! :-)以上是关于在 iOS 的 RestKit 中解析嵌套的 JSON的主要内容,如果未能解决你的问题,请参考以下文章