1

HTTP POST リクエストを介してサーバーに送信するデータを作成しようとしています。サーバーは特定の形式の JSON のみを受け入れます。それ以外の場合は、エラーが返されます。JSON ファイルを正常に作成してサーバーにアップロードできますが、JSON を正しくフォーマットしていないため、次のエラーが発生します。

JSON Error Message: {
    code = "-2";
    message = "Validation error: {\"message\":{\"to\":[\"Please enter an array\"]}}";
    name = ValidationError;
    status = error;
}

ご覧のとおり、サーバーには値とキーの配列を含む複雑な JSON 形式が必要ですが、その方法がわかりません。以下は、JSON データを作成するための現在のコードです。

//Create Array With TO Values
NSDictionary *toField = @{@"email" : emailField.text};
//Create Dictionary Values                
NSDictionary *messageContent = @{@"subject" : @"APPNAME Registration Complete", @"from_email" : @"email@domain.com", @"to" : toField};
NSDictionary *mandrillValues = @{@"key" : @"APPKEY",
                                 @"redirect_url" : @"PRIVATE-URL",
                                 @"template_name" : @"app-registration",
                                 @"template_content" : [NSNull null],
                                 @"message" : messageContent
                                };

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:mandrillValues options:NSJSONWritingPrettyPrinted error:nil];

と同様に、キーと値を持つ配列が必要です。ただし、NSArray を使用すると、値やキーを追加できません。これをどのように行うべきかについてのアイデアはありますか? 以下は、サーバーが受け入れるJSON 形式の例です。この形式に従うためにすべてを正しく行っていますか? そうでない場合、フォーマットに合わせて何を変更する必要がありますか?

{
"key": "example key",
"template_name": "example template_name",
"template_content": [
    {
        "name": "example name",
        "content": "example content"
    }
],
"message": {
    "text": "example text",
    "subject": "example subject",
    "from_email": "message.from_email@example.com",
    "from_name": "example from_name",
    "to": [
        {
            "email": "example email",
            "name": "example name"
        }
    ],
}}
4

1 に答える 1

3

「to」フィールドには配列が必要なようです。変数が、説明したキーと値を持つ辞書を含む NSArray でない限り、toField必要な JSON とはまったく異なる JSON を取得することになります。

発信する JSON の説明を出力して、どこに違いがあるかを正確に確認することをお勧めします。

更新 私はあなたの質問への追加を見ました-

NSDictionary *toField = @{@"email" : emailField.text};

配列を作成しません。試す:

NSArray *toField = @[@{@"email" : emailField.text}];
于 2013-02-02T16:57:41.000 に答える