17

これは、この間違った回答に対する回答です: https://stackoverflow.com/a/7894952/192819

NSString を次のように変換しますか:

NSString *str = @"teststring";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

末尾の \0 バイトを強制します。つまり、

-[NSJSONSerialization:JSONObjectWithData:] 

あなたがそれを取り除かない限り、他の人は失敗します。

4

1 に答える 1

31

いいえ、違います。次の例を参照してください。

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"v1", @"k1", 
                      @"v2", @"k2",
                      nil];
NSLog(@"dict=%@", dict);

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil];    

NSString *jsonAsString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

NSData *jsonDataFromString = [jsonAsString dataUsingEncoding:NSUTF8StringEncoding];

// DO NOT DO THIS:
// jsonDataFromString = [jsonDataFromString subdataWithRange:NSMakeRange(0, [jsonDataFromString length] - 1)];

NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:jsonDataFromString options:0 error:nil];
NSLog(@"jsonObject=%@", jsonObject);

それを試してから、「DO NOT DO THIS」行のコメントを外して試してください。問題がないことがわかります。

于 2012-12-30T00:05:50.297 に答える