使用unicode字符解码JSON数组

时间:2012-06-07 16:40:21

标签: python objective-c ios json cocoa-touch

我有以下JSON数组:

[u'steve@gmail.com']

“u”显然是unicode字符,它是由Python自动创建的。现在,我想把它带回到Objective-C并使用它将其解码为数组:

+(NSMutableArray*)arrayFromJSON:(NSString*)json
{
    if(!json) return nil;
    NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
   //I've also tried NSUnicodeStringEncoding here, same thing
    NSError *e;
    NSMutableArray *result= [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&e];
    if (e != nil) {
        NSLog(@"Error:%@", e.description);
        return nil;
    }
    return result;
}

但是,我收到错误:(Cocoa error 3840.)" (Invalid value around character 1.)

我该如何解决这个问题?

编辑:这是我如何将Python中的实体带回objective-c:

首先我将实体转换为字典:

def to_dict(self):
    return dict((p, unicode(getattr(self, p))) for p in self.properties()
                if getattr(self, p) is not None)

我将此词典添加到列表中,将我的responseDict ['entityList']的值设置为此列表,然后self.response.out.write(json.dumps(responseDict))

然而,我回来的结果仍然是'你'字符。

1 个答案:

答案 0 :(得分:6)

[u'steve@gmail.com']是数组的解码python值,它是无效的JSON。

有效的JSON字符串数据只是["steve@gmail.com"]

通过执行以下操作将数据从python转储回JSON字符串:

import json
python_data = [u'steve@gmail.com']
json_string = json.dumps(data)

python字符串文字的u前缀表示这些字符串是unicode而不是python2.X(ASCII)中的默认编码。