JSON

Ò»¶Î¼òµ¥µÄJSON½âÎö´úÂëµ½µ×ÄÜÖØ¹¹¼¸´Î£¿(2)

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£ºH5Ö®¼Ò 2015-10-08 10:10 ÎÒÒªÆÀÂÛ( )

CSDNÒÆ¶¯½«³ÖÐøÎªÄúÓÅÑ¡ÒÆ¶¯¿ª·¢µÄ¾«»ªÄÚÈÝ£¬¹²Í¬Ì½ÌÖÒÆ¶¯¿ª·¢µÄ¼¼ÊõÈȵ㻰Ì⣬º­¸ÇÒÆ¶¯Ó¦Óᢿª·¢¹¤¾ß¡¢Òƶ¯ÓÎÏ·¼°ÒýÇæ¡¢ÖÇÄÜÓ²¼þ¡¢ÎïÁªÍøµÈ·½·½ÃæÃæ¡£Èç¹ûÄúÏëͶ¸å¡¢²ÎÓëÄÚÈÝ·­Ò빤×÷£¬»òѰÇó½ü½³±¨µÀ£¬Çë·¢ËÍÓÊ

CSDNÒÆ¶¯½«³ÖÐøÎªÄúÓÅÑ¡ÒÆ¶¯¿ª·¢µÄ¾«»ªÄÚÈÝ£¬¹²Í¬Ì½ÌÖÒÆ¶¯¿ª·¢µÄ¼¼ÊõÈȵ㻰Ì⣬º­¸ÇÒÆ¶¯Ó¦Óᢿª·¢¹¤¾ß¡¢Òƶ¯ÓÎÏ·¼°ÒýÇæ¡¢ÖÇÄÜÓ²¼þ¡¢ÎïÁªÍøµÈ·½·½ÃæÃæ¡£Èç¹ûÄúÏëͶ¸å¡¢²ÎÓëÄÚÈÝ·­Ò빤×÷£¬»òѰÇó½ü½³±¨µÀ£¬Çë·¢ËÍÓʼþÖÁtangxy#csdn.net£¨Çë°Ñ#¸Ä³É@£©¡£ 

±¾Îijö×Ô£ºThoughtbot£¬×÷ÕߣºTony DiPasquale£¬ÒëÎijö×Ô£ºSwiftGG£¬ÒëÕߣºshanks

Æ»¹ûÍÆ³öµÄÃûΪ¡°Swift¡±µÄȫбà³ÌÓïÑÔ£¬ÕâÈÃÎÒÃǶÔδÀ´iOSºÍOS X¿ª·¢³äÂúÁËÆÚ´ýÓëÐË·Ü¡£ÈËÃǷ׷׿ªÊ¼Ê¹ÓÃXcode Beta1°æ±¾À´½øÐÐSwift¿ª·¢£¬µ«ÊǺܿì¾Í·¢ÏÖ½âÎöJSONÕâÒ»³£¼ûµÄ²Ù×÷ÔÚSwiftÖв¢²»ÈçÔÚObjectitve-CÖÐÄÇÑù¿ì½ÝºÍ·½±ã¡£

SwiftÊÇһ޲̬ÀàÐ͵ÄÓïÑÔ£¬ÕâÒâζÎÒÃDz»Äܼòµ¥µØ½«¶ÔÏó¸³Öµ¸øÒ»¸öÌØ¶¨ÀàÐ͵ıäÁ¿£¬²¢ÇÒÈñàÒëÆ÷ÏàÐÅÕâЩ¶ÔÏó¾ÍÊÇÎÒÃÇËùÉùÃ÷µÄÄÇÖÖÀàÐÍ¡£ÔÚSwiftµ±ÖУ¬±àÒëÆ÷»á½øÐмì²é£¬ÒÔÈ·±£ÎÒÃDz»»áÒâÍâµØ´¥·¢ÔËÐÐʱ´íÎó¡£ÕâʹµÃÎÒÃÇ¿ÉÒÔÒÀÀµ±àÒëÆ÷À´Ð´³öһЩÎÞBugµÄ´úÂ룬ͬʱÎÒÃDZØÐë×öÐí¶à¶îÍâµÄ¹¤×÷À´Ê¹±àÒëÆ÷²»±¨´í¡£ÔÚÕâÆªÎÄÕµ±ÖУ¬ÎÒ½«Ê¹Óú¯Êýʽ˼ÏëºÍ·ºÐÍÀ´Ì½ÌÖÈçºÎ±àдÒ×¶Á¸ßЧµÄ JSON ½âÎö´úÂë¡£

ÇëÇóÓû§(User)Ä£ÐÍ

ÎÒÃÇÒª×öµÄʾÍÊǽ«ÍøÂçÇëÇó»ñµÃµÄÊý¾Ý½âÎö³ÉJSON¡£Ö®Ç°ÎÒÃÇһֱʹÓõÄÊÇNSJSONSerialization.JSONObjectWithData(NSData, Int, &NSError)·½·¨£¬Õâ¸ö·½·¨·µ»ØÒ»¸ö¿ÉÑ¡µÄJSONÊý¾ÝÀàÐÍ£¬Èç¹û½âÎö¹ý³Ì³ö´í»áµÃµ½NSErrorÀàÐ͵ÄÊý¾Ý¡£

ÔÚObjective-Cµ±ÖУ¬JSONµÄÊý¾ÝÀàÐÍÊÇÒ»¸ö¿ÉÒÔ°üº¬ÈÎºÎÆäËüÊý¾ÝÀàÐ͵ÄNSDictionaryÀàÐÍ¡£ ¶øÔÚSwiftµ±ÖУ¬ÐµÄ×ÖµäÀàÐÍÒªÇóÎÒÃDZØÐëÏÔʽָ¶¨ËüËù°üº¬µÄÊý¾ÝµÄÀàÐÍ¡£JSON Êý¾Ý±»Ö¸¶¨ÎªDictionary<String, AnyObject>ÀàÐÍ¡£

ÕâÀïʹÓÃAnyObjectµÄÔ­ÒòÊÇJSONµÄÖµÓпÉÄÜΪString¡¢Double¡¢ Bool¡¢ Array¡¢ Dictionary»òÕßnull¡£µ±ÎÒÃÇʹÓÃJSONÀ´Éú³ÉÄ£ÐÍÊý¾Ýʱ£¬±ØÐë¶Ôÿһ¸ö´ÓJSON×ÖµäÖлñÈ¡µ½µÄÖµ½øÐÐÅжϣ¬ÒÔÈ·±£Õâ¸öÖµÓëÎÒÃÇÄ£ÐÍÖÐÊôÐÔµÄÀàÐÍÒ»Ö¡£

ÏÂÃæÎÒÃÇÀ´¿´Ò»¸öÓû§(user)µÄÄ£ÐÍ£º

struct User { let id: Int let name: String let email: String }

È»ºó£¬À´¿´Ò»Ï¶Ե±Ç°Óû§µÄÇëÇóºÍÏìÓ¦´úÂ룺

func getUser(request: NSURLRequest, callback: (User) -> ()) { let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, urlResponse, error in var jsonErrorOptional: NSError? let jsonOptional: AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &jsonErrorOptional) if let json = jsonOptional as? Dictionary<String, AnyObject> { if let id = json["id"] as AnyObject? as? Int { // ÔÚ beta5 ÖУ¬´æÔÚÒ»¸ö bug£¬ËùÒÔÎÒÃÇÊ×ÏÈҪǿÐÐת»»³É AnyObject? if let name = json["name"] as AnyObject? as? String { if let email = json["email"] as AnyObject? as? String { let user = User(id: id, name: name, email: email) callback(user) } } } } } task.resume() }

ÔÚÒ»³¤´®µÄif-letÓï¾äÖ®ºó£¬ÎÒÃÇÖÕÓÚÄõ½User¶ÔÏ󡣿ÉÒÔÏëÏóһϣ¬Èç¹ûÒ»¸öÄ£Ð͵ÄÊôÐԺܶ࣬ÕâЩ´úÂë»áÓжà³ó¡£²¢ÇÒ£¬ÕâÀïÎÒÃÇûÓнøÐдíÎó´¦Àí£¬ÕâÒâζ×Å£¬Ö»ÒªÆäÖÐÒ»²½³ö´íÎÒÃǾͻñÈ¡²»µ½ÈκÎÊý¾Ý¡£×îºó²¢ÇÒ×îÖØÒªµÄÒ»µãÊÇ£¬ÎÒÃDZØÐë¶Ôÿ¸öÐèÒª´ÓÍøÂç API ÖлñÈ¡µÄÄ£ÐÍдһ±éÀàËÆÉÏÃæÕâÑùµÄ´úÂ룬Õ⽫»áµ¼ÖºܶàÖØ¸´´úÂë¡£

ÔÚ¶Ô´úÂë½øÐÐÖØ¹¹Ö®Ç°£¬ÈÃÎÒÃÇÏȶÔJSONµÄ¼¸ÖÖÀàÐͶ¨Òå±ðÃû£¬ÒÔʹ֮ºóµÄ´úÂë¿´ÆðÀ´¸ü¼ò½à¡£

typealias JSON = AnyObject typealias JSONDictionary = Dictionary<String, JSON> typealias JSONArray = Array<JSON>ÖØ¹¹£ºÌí¼Ó´íÎó´¦Àí

Ê×ÏÈ£¬ÎÒÃǽ«Í¨¹ýѧϰµÚÒ»¸öº¯Êýʽ±à³ÌµÄ¸ÅÄEither<A, B>ÀàÐÍ£¬À´¶Ô´úÂë½øÐÐÖØ¹¹£¬ÒÔʹÆäÄܽøÐдíÎó´¦Àí¡£Õâ¿ÉÒÔʹ´úÂëÔÚÕýÈ·µÄÇé¿öÏ·µ»ØÓû§¶ÔÏ󣬶øÔÚ³ö´íʱ·µ»ØÒ»¸ö´íÎó¶ÔÏó¡£ÔÚSwiftµ±ÖпÉÒÔʹÓÃÈçÏ·½·¨À´ÊµÏÖEither<A, B> £º

enum Either<A, B> { case Left(A) case Right(B) }

ÎÒÃÇ¿ÉÒÔʹÓà Either<NSError, User> ×÷Ϊ´«Èë»Øµ÷µÄ²ÎÊý£¬ÕâÑùµ÷ÓÃÕß±ã¿ÉÒÔÖ±½Ó´¦Àí½âÎö¹ýµÄUser¶ÔÏó»òÕß´íÎó¡£

func getUser(request: NSURLRequest, callback: (Either<NSError, User>) -> ()) { let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, urlResponse, error in // Èç¹ûÏìÓ¦·µ»Ø´íÎó£¬ÎÒÃǽ«°Ñ´íÎó·¢Ë͸ø»Øµ÷ if let err = error { callback(.Left(err)) return } var jsonErrorOptional: NSError? let jsonOptional: JSON! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &jsonErrorOptional) // Èç¹ûÎÒÃDz»ÄܽâÎö JSON£¬¾Í½«·¢ËÍ»ØÈ¥Ò»¸ö´íÎó if let err = jsonErrorOptional { callback(.Left(err)) return } if let json = jsonOptional as? JSONDictionary { if let id = json["id"] as AnyObject? as? Int { if let name = json["name"] as AnyObject? as? String { if let email = json["email"] as AnyObject? as? String { let user = User(id: id, name: name, email: email) callback(.Right(user)) return } } } } // Èç¹ûÎÒÃDz»ÄܽâÎöËùÓеÄÊôÐÔ£¬¾Í½«·¢ËÍ»ØÈ¥Ò»¸ö´íÎó callback(.Left(NSError())) } task.resume() }

¡¡

1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎ×ªÔØµÄ¸å¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬Çë×ªÔØÊ±Îñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

Ïà¹ØÎÄÕÂ
  • iOSÈëÃÅѧϰ(json½âÎö)

    iOSÈëÃÅѧϰ(json½âÎö)

    2016-01-26 09:00

  • iOSÖÐjson½âÎö³öÏÖµÄnull,nil,NSNumberµÄÎÊÌ⣬jsonnsnumber

    iOSÖÐjson½âÎö³öÏÖµÄnull,nil,NSNumberµÄÎÊÌ⣬jsonnsnumber

    2016-01-17 15:03

  • iOS¿ª·¢PostÇëÇó´íÎó£ºError Domain=NSCocoaErrorDomain Code=3840

    iOS¿ª·¢PostÇëÇó´íÎó£ºError Domain=NSCocoaErrorDomain Code=3840 "

    2015-11-23 19:03

  • Ò¶ÁáͯЬµÄ¿Î³Ì

    Ò¶ÁáͯЬµÄ¿Î³Ì

    2015-11-23 12:17

ÍøÓѵãÆÀ
·