
已解决问题
谷歌anoi333692用户在2021.08.20提交了关于“我的大叔如何解析从webservice返回的json”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T21:27:08。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,谢谢你帮我,祝你快乐,愿你事事如意 !
详细问题描述及疑问:期待您的答案,谢谢你帮我,祝你快乐,愿你事事如意 !
如何解析从webser
解析json我个人选择sbjson库。还
让我们来对什么是
wikiw上说:
json(j**ascriptObjectNotation的缩写)是一个基于文本的,人类可读的,**标准的轻量级**交换
json以键衷
“name”:“J
所以json用一种
所以当从webservi
但是json可以表示哪
1.对象
2.字符串用双引号
3
4.数组由中括号包围
5.布尔值从'true'和'false'获得,没有引号
6.**ll值由'**ll'表示,没有引号
下面的例子使用了所有这些**类型:(显然并没有bool和**ll类
{
"firstName":"John",
"la
"age":25,
"address":
{
"s
"city":
"s
"postalCode":"10021"
},
"
[
{"type":"h
{"type":"fax","**mber":"646555-4567"}
]
}
以上数
#import
@interfacePerson:NSObject
{
NSString*firstNam
NSString*lastName;
NSIntegerage;
NSDictionary*address;
NSArray*phoneNumbers;
}
@end
你会认为我们漏掉了一些信息,比如地址的详情,以及电话号码。怎么建立你的对象模型是你决定的事情。
我选择了用字典保存地址详情,每个值用一个key名字引用,就像在json中一样。电话号码也保存在字典里,但是这些字典是放到数组中的。
如果你希望,你可以创建一个名为Adress的类,用它来保存地址详情。这会变得更像面向对象的方式,如果在app的其他地方还要用到address,并且不必绑定到person上的话会很有用。
一旦你有了自己的对象模型,你需要从json中得到**并创建模型的实例。
sbjson有一个有用的sbjsonparser类,可以在一行内搞定整个json串的解析:
SBJsonParser*jsonParser=[[SBJsonParseralloc]init];
N**rror*error=nil;
NSArray*jsonObjects=[jsonParserobjectWithString:jsonStringerror:&error];
[jsonParserrelease],jsonParser=nil;
sbjson将json作为objective-c的字典来处理。对于不同的webservice,你可能得到一个顶级的json对象或者一个数组。因此,objectWithString:error:有一个id类型返回值。你可以使用objective-c的动态特性来决定解析返回时采用何种**来接收,如下:
idjsonObject=[jsonParserobjectWithString:jsonStringerror:&error];
if([jsonObjectisKindOfClass:[NSDictionaryclass]])//treatasadictionary,orreassigntoadictionaryivarelseif([jsonObjectisKindOfClass:[NSArrayclass]])//treatasanarrayorreassigntoanarrayivar.
如果webservice永远只返回两种顶层表现的一种,你大可以继续并假设它会是一个数组或字典,而不必担心检查(类型)。
现在你得到了以你可以通过objcetive-c管理的格式来表示json**。你所要做的就是遍历数组/字典的内容,并创建person对象来表示他们。
一件值得记住的事情是,遍历如年龄这种数字将被包裹在NSNumber对象中,所以我们需要对其调用'intValue'来得到数字。
NSMutableArrary*people=[NSMutableArrayarray];
for(NSDictionary*dictinjsonObjects)
{
Person*newPerson=[[[Personalloc]init]autorelease];
[newPersonsetFirstName:[dictobjectForKey:@"firstName"]];
[newPersonsetLastName:[dictobjectForKey:@"lastName"]];
[newPersonsetAge:[[dictobjectForKey:@"age"]intValue]];
[newPersonsetAddress:[dictobjectForKey:@"address"]];
[newPersonsetPhoneNumbers:[dictobjectForKey:@"phoneNumber"]];
[peopleaddObject:newPerson];
}
最终我们完成了。