NSJSONSerialization会产生垃圾

时间:2016-01-16 11:58:19

标签: ios json nsdictionary ios9 nsjsonserialization

使用NSString创建NSDictionary - NSJSONSerialization的表示(JSON字符串)时遇到一些问题。我之前使用过JSONKit,但由于它在iOS9(和崩溃)中被弃用,我切换到NSJSONSerialization

这是我的代码:

// `userSettings` will be of type NSMutableDictionary*

NSData* data= [NSJSONSerialization dataWithJSONObject:userSettings options:0 error:&error];
NSString* settingsString= [NSString stringWithUTF8String:data.bytes];

currentUser.settings= settingsString;   // NSString* property

现在,此代码不时有效,但有时settingsString将为nil。当我在调试器中检查数据对象时,bytes属性显示JSON-String后跟一些随机垃圾,如下所示:

1 = 0x00007ff1ba814000 "{\"residua
...
lculatePlanned\":\"0\",\"wizardUserId\":\"\"}UITextColor\x91UISystemColorName\x94UIBaselineAdjustment\x8cUISystemFont\x89NS.intval\x8eUIShadowOffset\x94UIAutoresizeSubviews\x8dUIContentMode\x85NSRGB\x8aUIFontName\x8bUITextLabel\x8eNSInlinedValue\x91UIDetailTextLabel\x99UIUserInteractionDisabled\x9dUITableCellBackgroundColorSet\x94UINibEncoderEmptyKey\x87NSWhite\x8cNSColorSpace\x8fUITextAlignment\xa3UINibAccessibilityConfigurationsKey\x92UIAutoresizingMask\x99UIProxiedObjectIdentifier\x87UIAlpha\x87UIWhite\x9aUIFontDescriptorAttributes\x8cUIFontTraits\x86NSSize\x95UIColorComponentCount\x91UIMinimumFontSize\x86UIText\x96UIMultipleTouchEnabled\x8dUIDestination\x94UIMi..."
                                             ^ start of garbage after end of dictionary

我做错了什么?

1 个答案:

答案 0 :(得分:3)

不要使用+ stringWithUTF8String:,它依赖于一个以NULL结尾的C字节数组,并且偶然只有一个NULL终结符,它可能在您期望的特性结束后很好。

改为使用:

- (instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding

例如:

NSString *settingsString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];