0

配列をjsonオブジェクトに変換してからサーバーに送信しています。しかし、サーバー側で無効な文字を取得すると、無効な文字が表示されます。「\n」、「\」など。これは、サーバー側で取得したデータのサンプルです。

('[\n  "{\\"id\\":2,\\"qrCode\\":\\"KdcUfeddHpbepeXnyiKFjcfedHp\\",\\"activity\\":\\"2\\",\\"time\\":\\"64485\\",\\"image_base64\\":\\"\\/9j\\/4AAQSkZJRgABAQAA"}"\n]');

ただし、次のようになります。

('[{"id":2,"qrCode":"KdcUfeddHpbepeXnyiKFjcfedHp","activity":2,"time":1372757846,"image_base64":"AA\\u003d\\u003d\\n"}]');

コードは次のとおりです。

-(void)setOflynData2JsonFormat{

if (!([self.getOfflineData count] == 0)) {

    NSArray *array = [self getOfflineData];

    for (int i = 0; i<[array count]; i++) {

        uniqueId++;

        NSNumber *uId = [NSNumber numberWithInt:uniqueId];

        OfflineTableObject *offObj = [array objectAtIndex:i];

        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

        [dict setValue:uId forKey:@"id"];
        [dict setValue:offObj.qrCode forKey:@"qrCode"];
        [dict setValue:offObj.offlineStatus forKey:@"activity"];
        [dict setValue:offObj.time forKey:@"time"];
        [dict setValue:offObj.imageData forKey:@"image_base64"];

        SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];

        NSString *singleJsonString = [jsonWriter stringWithObject:dict];

        NSLog(@"Json string : %@",singleJsonString);

        arrayOfJsonString = [[NSMutableArray alloc]init];

        [arrayOfJsonString addObject:singleJsonString];

    }

    NSData *jsonDataFromArray = [NSJSONSerialization dataWithJSONObject:arrayOfJsonString options:NSJSONWritingPrettyPrinted error:nil];

    NSString *jsonString = [[NSString alloc] initWithData:jsonDataFromArray encoding:NSUTF8StringEncoding];

    NSLog(@"jsonData as string:\n%@", jsonString);

    int check = [obj sendOfflynData2Server:jsonString];

}

}

では、どこに問題があるのでしょうか。助けてくれてありがとう。

4

1 に答える 1

2

問題は、データを JSON に 2 回変換していることです。

最初にすべてのdictをjsonに変換します

NSString *singleJsonString = [jsonWriter stringWithObject:dict];

それらを配列に追加してから、配列をJSONに再変換します

NSData *jsonDataFromArray = [NSJSONSerialization dataWithJSONObject:arrayOfJsonString options:NSJSONWritingPrettyPrinted error:nil];

そのため、期待される JSON 出力を生成する代わりに、JSON 文字列の配列をシリアル化するため、混乱が回避されます。

代わりに、辞書を配列に追加してから、すべてをシリアル化する必要があります。

arrayOfJsonString = [[NSMutableArray alloc]init];
for (int i = 0; i<[array count]; i++) {

    // snip

    [arrayOfJsonString addObject:dict];

}

NSData *jsonDataFromArray = [NSJSONSerialization dataWithJSONObject:arrayOfJsonString options:NSJSONWritingPrettyPrinted error:nil];
于 2013-07-05T13:19:29.030 に答える