2016-04-14 25 views
-2

JSON配列をページに出力しています。このJSON配列をNSArrayに変換したいと思います。jsonをNSArrayに変換する方法

enter image description here

それとも変換するように、このJSON: enter image description here

は、誰かが私にはステップが何であるかを知らせることができますか?ありがとうございました!

+2

については 'NSJSONSerialization'。これはおそらく数百万回答えられています。 – Avi

+0

@trojanfoe、重複を見つけることに感謝します。私はそれが答えられていたことを知っていましたが、私が前にコメントしたときには、より包括的な検索のための時間がありませんでした。 – Avi

+1

@trojanfoeそれはまったくうまくいかないので、新しいユーザーを降格させる。彼を助ける代わりにあなたは彼の質問を閉じました。 –

答えて

0

これを試してください。

NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

それとも

NSArray * json = [self JSONWithData:data]; 

+(id)JSONWithData:(NSData *)data 
{ 
    if (!data) 
    { 
     return nil; 
    } 

    id json = [NSJSONSerialization JSONObjectWithData:data 
               options:0 
               error:nil]; 
    if (!json) 
    { 
     // try to clean response 
     NSString * dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     if (!dataString) 
     { 
      dataString = [[NSString alloc] initWithData:data encoding:NSWindowsCP1251StringEncoding]; 
     } 
     NSRange rangeDict = [dataString rangeOfString:@"{"]; 
     NSRange rangeArray = [dataString rangeOfString:@"["]; 
     NSRange range = rangeDict; 
     if ((rangeDict.location == NSNotFound) || (rangeArray.location != NSNotFound && rangeArray.location < rangeDict.location)) 
     { 
      range = rangeArray; 
     } 

     if (range.location != NSNotFound) 
     { 
      dataString = [dataString substringFromIndex:range.location]; 
      NSError * error = nil; 
      if ([dataString length]) 
      { 
       json = [NSJSONSerialization JSONObjectWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding] 
                 options:0 
                 error:&error]; 
       if (!json) 
       { 
        dataString = [dataString stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"]; 
        error = nil; 
        json = [NSJSONSerialization JSONObjectWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding] 
                  options:0 
                  error:&error]; 
       } 
       if (!json) 
       { 
        dataString = [dataString stringByReplacingOccurrencesOfString:@"\r" withString:@""]; 
        error = nil; 
        json = [NSJSONSerialization JSONObjectWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding] 
                  options:0 
                  error:&error]; 
       } 
      } 
      if (json) 
      { 
       NSLog(@"Response cleaned"); 
      } 
      else 
      { 
       NSLog(@"Failed to parse JSON: %@", [error localizedDescription]); 
      } 
     } 
    } 

return json; 
} 

など、それを使用します。

if (json) { 
    if ([json count] > 0) { 
     NSString * name = json[0]["name"] 
     if (name) { 

     } 
     NSArray *arrayContent = json[0]["array_content"] 
    } 
} 

スウィフト3.0

extension JSONSerialization { 
    final class func jsonObject(with data: Data, checkEscapeSymbols: Bool = false) -> Any? { 
     do { 
      var data = data 
      if !data.isEmpty, let txt = String(data: data, encoding: .utf8) { 
       var newTxt = txt.replacingOccurrences(of: "\\", with: "\\\\") 
       newTxt = newTxt.replacingOccurrences(of: "\\\\/", with: "\\/") 
       newTxt = newTxt.replacingOccurrences(of: "\\\\\"", with: "\"") 
       newTxt = newTxt.replacingOccurrences(of: "\\\"", with: "\"") 
       newTxt = newTxt.replacingOccurrences(of: "\\\\'", with: "\\'") 
       if checkEscapeSymbols { 
        newTxt = newTxt.replacingOccurrences(of: "\0", with: "\\0") 
        newTxt = newTxt.replacingOccurrences(of: "\r", with: "\\r") 
        newTxt = newTxt.replacingOccurrences(of: "\n", with: "\\n") 
        newTxt = newTxt.replacingOccurrences(of: "\t", with: "\\t") 
       } 
       if let data_ = newTxt.data(using: .utf8) { data = data_ } 
      } 
      return try jsonObject(with: data, options: []) 
     } catch { return nil } 
    } 
} 

guard let json = JSONSerialization.jsonObject(with: data) as? AnyObject else { return } 
+0

これはなぜとても複雑ですか? – trojanfoe

+0

よりシンプルなバージョンを追加しました。 –

関連する問題