2

次の 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))

ただし、返される結果にはまだ「u」文字が含まれています。

4

1 に答える 1

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接頭辞は、それらの文字列が python2.X (ASCII) のデフォルトのエンコーディングではなく、Unicode であることを示しています。

于 2012-06-07T16:48:18.563 に答える