繁体   English   中英

Objective-C / iOS:将对象数组转换为JSON字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM