Instapaper API ドキュメントから:
Instapaper 文字列は常に UTF-8 でエンコードされており、Instapaper はすべての入力が UTF-8 であることを想定しています。特に明記しない限り、すべてのメソッドからの出力は配列です。デフォルトでは、出力配列は JSON として返されます。jsonp=myCallback などのコールバック関数名で jsonp パラメータを指定して、JSONP を使用し、指定された関数への呼び出しで出力をラップすることができます。
したがって、有効でない JSON を取得する方法はありません。
次のコードを試してください:
NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL urlWithString:@"http://your-instapeper-API-link"] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id serializationJSON = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
そして、何が間違っているか、または結果が期待どおりかどうかをログに記録できます。
NSLog(@"class of JSON input: %@ \n and possible error: %@",[serializationJSON class],error);
もちろん、配列とエラーなしを期待する必要があります。
EDIT ...コメントコードに基づいて:
ドキュメントに基づいて、Array または Dictionary を取得する必要があります。行番号 23 の代わりにこのコアを追加してください (ここからの番号):
if([JSON isKindOfClass:[NSDictionary class]]) {
NSDictionary *jsonDictionary = JSON;
NSLog(@"%@",[jsonDictionary allKeys]);
} else {
NSLog(@"JSON object class: %@",[JSON class]);
}
出力を見せてください。
もう一つ:
リクエストから配列を取得します。すごい!これは有効な JSON です。したがって、デバッグする必要があります。私が言ったように、それは無制限のアクセスパブリック API ではないので、調べることができます。しかし、ここで結果をデバッグする必要があります。ブックマークにアクセスしようとしていることがコードでわかります。だから私はドキュメントのブックマークセクションを見て、これはある種のリスト(NSArray)です。したがって、どのような結果が必要なのかわからない場合。それらをログに出力する (またはブレークポイントを設定する) 必要があります。以前の更新のコードを次の単純なログに置き換えます。
NSDictionary *resultDictionary;
if([JSON isKindOfClass:[NSArray class]]) {
NSArray *jsonArray = JSON;
NSLog(@"so json is an array with %i objects",[jsonArray count]);
for(id objectInsideArr in jsonArray) {
NSLog(@"object in array [class]: %@ [value]: %@",[objectInsideArr class],objectInsideArr); //if here you find NSDictionary maybe is this dictionary you are looking for. I'm not sure what it is.
if([objectInsideArr isKindOfClass:[NSDictionary class]]) {
resultDictionary = [[NSDictionary alloc] initWithDictionary:objectInsideArr];
}
}
}