Sbjson教程
So the This post will focus on parsing the JSON returned from thewebservice. My personal choice for parsing JSON isthe Let’s start with a quick recap on what JSON is and how it can beused. Wikipedia says:
JSON presents its data as key-value pairs. Each value is referencedby a key name,which is a string. If you were to represent a personin JSON,their name would be referenced by the key “name” like so:“name” : “James”. So,JSON represents data in a way that can be passed betweenapplications easily. Perfect. So when parsing data from a webservice,the first thing you shoulddo is figure out your model. Look at an example of the webservice’sresponse and figure out which bits represent objects,arrays ofobjects,fields that belong to an object,etc. But what kinds of data can JSON represent?
So an example of JSON using all these data types: And it’s representation in Objective-C: #import You may think we’ve missed out some information,such as thedetails of the address,and phone numbers. It’s you decision howyou model your objects. I’ve chosen to store the address details ina dictionary,each value being referenced by a key name,just as itis in JSON. The phone numbers also stored in dictionaries,but thenthose dictionaries put into an array. If you wanted to,you could create another Class named Address anduse it to store the address details. This may be a moreobject-oriented approach and useful if addresses are used in otherplaces throughout your application without needing to be tied to aPerson. So now that you have your object model,you need to get the dataout of the JSON and create instances of your model. SBJSON has a useful SBJsonParser class that can parse an entireJSON object in one line: SBJsonParser *jsonParser = [[SBJsonParser alloc] init]; NSError *error = nil; *jsonObjects [jsonParser objectWithString:jsonString error:&error]; [jsonParser release],jsonParser nil; SBJSON treats JSON objects as dictionaries in Objective-C.Depending on the webservice you may get a JSON object as the toplevel object or you may get an array. For this reason,objectWithString:error: has id jsonObject ]; If the webservice only ever returns one of the two representationsas it’s top level then you can go ahead and assume it will beeither an Array or Dictionary,and not have to worry aboutchecking. Now you have your JSON data in a format that you can manage viaObjective-C. All you need to do now is iterate over the contents ofthe dictionary/array and create instances of Person to representthem. One thing that’s important to remember is that literal numbers suchas the age value in our Person example will be wrapped in NSNumberobjects,so we’ll need to call ‘intValue’ on them to get thenumber. NSMutableArrary *people NSMutableArray arrayfor (*dict in jsonObjects) { Person *newPerson [Person alloc] autorelease]; [newPerson setFirstName[dict objectForKey:@"firstName"[newPerson setLastName"lastName"[newPerson setAge"age"] intValue[newPerson setAddress"address"[newPerson setPhoneNumbers"phoneNumber"]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |