1

NSArray に NS(Mutable)Dictionary を配置するコードを書きました。しかし、辞書を配列に追加すると、キーと値のペアごとに個別の辞書が作成されるようです。以下の例を参照してください。

NSMutableDictionary *info = [[NSMutableDictionary alloc] init];
[info setObject:@"123" forKey:@"user_id"];
[info setObject:@"John" forKey:@"name"];
NSArray *array = [NSArray arrayWithObject:info];

NSMutableDictionary *htmlParams = [[NSMutableDictionary alloc] init];
[htmlParams setObject:array forKey:@"users"];

期待される出力:

{
    "users": [
        {
            "user_id": 123,
            "name": "John
        }
    ]

}

私が得るもの:

{
    "users": [
        {
            "user_id": 123,
        }, {
            "name": "John
        }
    ]

}

私は何を間違っていますか?

ご協力いただきありがとうございます!!

編集*さらにいくつか試してみましたが、問題が何であるかを理解したようですが、それでも奇妙に思えます。

ちょっとした背景: NSDictionary をログに記録すると、確かに期待どおりの出力が得られます。しかし、バックエンドに送信すると、めちゃくちゃになります。

新しい NSDictionaries を (オブジェクト リテラルとして) 作成しました。

1:

NSDictionary *info = @{
    @[
        @{
            @"firstname": @"John",
            @"lastname": @"Doe",
        },
        @{
            @"firstname": @"Jane",
            @"lastname": @"Da",
        },
    ]
};

2:

NSDictionary *info = @{
        @0: @{
                @"firstname": @"John",
                @"lastname": @"Doe",
        },
        @1: @{
                @"firstname": @"Jane",
                @"lastname": @"Da",
        },
};

1: 問題が発生しました。配列内のすべての行が、バックエンドで異なる辞書として出力されます。2: 期待どおりに動作します。

この問題の原因はわかりませんが、私のパッケージ (AFNetworking) ではなく、バックエンド (Symfony PHP) でもないと確信しています。

編集 *

Json Serializer をリクエストに追加する必要があったようです。

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
4

2 に答える 2

0

JSON Serializer をリクエストに追加する必要があったようです。

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
于 2016-12-19T15:37:58.203 に答える