0

私はプログラミングが得意ではなく、非常に単純な問題に直面しているようです。JSONを使用したRESTリクエストを介してサーバーにデータを投稿する方法がわかりません。受け入れなければならないフォーマットは

{
    "date": "2012-12-20 12:00:00",
    "address": "asd",
    "name": "asdasdasdasdasd",
    "shipping_date": "2012-12-20 12:00:00",
    "receiver_phone": "123456789",
    "customer_phone": "123456789",
    "total_price": "1234",
    "items": {
        "1": {
            "item_id": "1",
            "quantity": "1",
            "type": "1",
            "color_id": "0"
        }
    }
} 

Json を使用して Objective C にデータを投稿するという記事を見つけましたが、文字列を適切にフォーマットできません。

4

3 に答える 3

0

その投稿は、フォーマットビットを除いて、まさにあなたが望むもののようです。JSONKit使用するのは非常に簡単なクラスです。私はそれがより強力だと思いますNSJSONSerialization。しかし、これのために、私はスティッチしNSJSONSerializationます:

// create a dictionary with the structure you want
NSDictionary *dict = @{
    @"date":@"2012-12-20 12:00:00",
    @"address":@"asd",
    @"name":@"asdasdasdasdasd",
    @"shipping_date":@"2012-12-20 12:00:00",
    @"receiver_phone":@"123456789",
    @"customer_phone":@"123456789",
    @"total_price": @"1234",
    @"items": @{
        @"1": @{
            @"item_id": @"1",
            @"quantity": @"1",
            @"type": @"1",
            @"color_id": @"0"
        }
    }
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:nil error:&error];

if ( error ) {
    // handle accordingly
}
else if ( jsonData != nil ) {
    NSString *jsonRequest = [[NSString alloc] initWithData:jsonData encoding:NSUTF*Encoding];
    // build request like example
}

これで、残りの例を使用できます。

更新

私はJSONKitより強力でNSJSONSerialization、必要な手順も少なくて済みますがNSJSONSerialization、同じ結果が得られるはずであり、ARCコードと非ARCコードの混合について心配する必要はありません。

更新2

私は真剣な外観を与えることをお勧めしJSONKitます、それはそれほどうるさいものではありません(つまり、値はのNSNumber代わりになりますNSString)。-fno-objc-arcのビルドフェーズでフラグを設定する必要がありますJSONKit.m

于 2013-03-04T17:05:02.697 に答える
0

辞書を作成してから、NSJSONSerialization を使用してデータに変換するとよいでしょう。

NSDictionary *params = ...

NSError *error;
NSData *postdata = [NSJSONSerialization dataWithJSONObject:params 
                                                   options:0 
                                                     error:&error];
[request setHTTPBody:postData];
于 2013-03-04T17:10:07.990 に答える