[英]Objective-C / iOS: Converting an array of objects to JSON string
我目前正在尝试使用JSON进行互联网数据传输。 我已经成功接收了JSON字符串并将其转换为NSDictionary
,但是还无法确定如何将对象的数组或字典转换为JSON表示形式。
我已经阅读了许多文章和文章,这些文章和文章解释了如何创建键/值对的NSDictionary
,然后将其转换为JSON,这对于简单的数组来说效果很好,但是当您拥有对象的数组或字典时如何实现此目的。
因此,例如,我有一个对象数组“ contact”,然后将其转换为这样的JSON字符串:
"contacts":{
"contact":[
{
"id":"1"
"first_name":"john",
"last_name":"citizen",
"phone":"9999 9999"
}
{
"id":"1"
"first_name":"jane",
"last_name":"doe",
"phone":"8888 8888"
}
]
}
我有一个NSMutableDictionary
,它填充联系人对象的列表:
NSMutableDictionary* contactsToBeSynced = [[NSMutableDictionary alloc] init];
//Populate dictionary with contact objects.
contactsToBeSynced = self.getNonSynchronisedData;
然后,我尝试使用NSJSONSerialization
方法转换对象的字典,但是它失败并出现错误。
NSError* error;
NSString* jsonString;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:contactsToBeSynced options:NSJSONWritingPrettyPrinted error:&error];
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
有人能成功做到这一点吗? 将不胜感激一些帮助或朝着正确方向的观点。 干杯。
关于你的结构-你contactsToBeSynced
必须是NSDictionary
类,并且contact
应该是一个NSArray
含有NSDictionary
对象,对不同的联系人。 顺便说一句,您尝试过JSONKit吗? 它的序列化比标准NSJSONSerialization
更好。
我解决了...
我创建了一个接触对象的NSArray
,并将SBJson框架与SBJsonWriter结合使用:
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
NSString *jsonString = [writer stringWithObject:arr];
我得到了带有联系人列表的JSON字符串。
检查我对“ SBJsonWriter嵌套NSDictionary ”问题的回答。 它说明了如何正确使用SBJsonWriter。
它包括SBJsonWriter错误检查! 以及有关NSDate,float等的SBJsonWriter行为的一些建议。
摘抄:
NSDictionary* aNestedObject = [NSDictionary dictionaryWithObjectsAndKeys:
@"nestedStringValue", @"aStringInNestedObject",
[NSNumber numberWithInt:1], @"aNumberInNestedObject",
nil];
NSArray * aJSonArray = [[NSArray alloc] initWithObjects: @"arrayItem1", @"arrayItem2", @"arrayItem3", nil];
NSDictionary * jsonTestDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"stringValue", @"aString",
[NSNumber numberWithInt:1], @"aNumber",
[NSNumber numberWithFloat:1.2345f], @"aFloat",
[[NSDate date] description], @"aDate",
aNestedObject, @"nestedObject",
aJSonArray, @"aJSonArray",
nil];
通常,您为每个类编写一个toDictionary
方法,该方法获取感兴趣的字段并将其插入字典中。 对于数字字段,请在插入之前将其转换为NSNumber。 如果任何字段是对象,则在该对象上调用toDictionary
方法,然后将结果插入字典中。 如果您有一个对象数组,则需要编写一个循环,但这并不奇怪。
要反转操作,请为每个类编写一个initWithDictionary
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.