POST 요청을 위해 직렬화 할 때 키로 NSDictionary를 중첩하는 iOS NSJSONSerialization

Mattforni

실행중인 RoR 서버에 일부 데이터를 게시하려고 시도하고 있지만 보내려는 NSDictionary가 직렬화 후 형식화되는 방식에 문제가 있습니다.

다음은 내 Objective C 코드입니다.

- (void)registerUser:(NSString *)provider uid:(NSString *)uid
         inviteCode:(NSString *)inviteCode userInfo:(NSDictionary *)userInfo
{
    NSLog(@"Attempting to register user");

    // Construct the data to post
    NSDictionary *post = @{
        @"provider": provider,
        @"uid": uid,
        @"invite_code": inviteCode,
        @"user_info": userInfo
    };
    // TODO need to format better so it works with rails
    NSData *data = [NSJSONSerialization dataWithJSONObject:post options:0 error:nil];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:_registerUserURL]];
    [request setHTTPMethod:@"POST"];

    NSURLSession *session = [NSURLSession sessionWithConfiguration:_defaultConfig];
    NSURLSessionUploadTask *task = [session uploadTaskWithRequest: request
            fromData: data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        NSLog(@"%@", json);
    }];

    [task resume];
}

다음 형식으로 데이터를 RoR 서버에 게시 할 것으로 예상했습니다.

{\"user_info\":{\"name\":\"Matt Fornaciari\",\"email\":\"[email protected]\",\"city\":\"San Francisco, California\"},\"provider\":\"facebook\",\"uid\":\"10202835053250675\",\"invite_code\":\"a\"}

그러나 직렬화 프로세스는 내 사전을 중첩하는 것 같습니다.

2014-12-09T04:20:14.366921+00:00 app[web.1]: Started POST "/users/register" for 67.160.200.20 at 2014-12-09 04:20:14 +0000
2014-12-09T04:20:14.439711+00:00 app[web.1]: Completed 400 Bad Request in 22ms (Views: 0.2ms | ActiveRecord: 0.0ms)
2014-12-09T04:20:14.417370+00:00 app[web.1]: Processing by UsersController#register as */*
2014-12-09T04:20:14.417422+00:00 app[web.1]:   Parameters: {"{\"user_info\":{\"name\":\"Matt Fornaciari\",\"email\":\"[email protected]\",\"city\":\"San Francisco, California\"},\"provider\":\"facebook\",\"uid\":\"10202835053250675\",\"invite_code\":\"a\"}"=>nil}

따라서 내 모든 데이터가 도착하지만 nil 값을 가리키고 모든 데이터를 Ruby에서 읽을 수 없게 만드는 키로 다른 Map 내에 중첩됩니다 . 누구든지 이것을 경험하고 조언이 있습니까?

Mattforni

따라서 NSJSONSerialization이 JSON을 레일스 애플리케이션에 보내는 데 잘 작동하지 않는 것 같습니다. NSData문자열 에서 개체를 수동으로 생성하여 문제를 해결할 수있었습니다 . 아래는 매개 변수를 인코딩하는 데 사용한 코드입니다.

// Construct the data to post
NSString *post = [NSString stringWithFormat:
    @"provider=%@&uid=%@&invite_code=%@&user_info[name]=%@&user_info[email]=%@&user_info[city]=%@",
    provider, uid, inviteCode, userInfo[@"name"], userInfo[@"email"], userInfo[@"city"]
];
NSData *data = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

// Create and send the request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:_registerUserURL]];
[request setHTTPMethod:@"POST"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:_defaultConfig];
NSURLSessionUploadTask *task = [session uploadTaskWithRequest: request
        fromData: data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"%@", json);
}];

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

POST 요청 C #을 위해 JSON을 JSON 배열 (중첩 JSON)로 직렬화

분류에서Dev

XHR로 HTTP POST 또는 PUT 요청을 할 때 상태를 확인해야합니까?

분류에서Dev

iOS NSJSONSerialization을 사용하여 POST 요청에서 JSON 데이터 보내기

분류에서Dev

기존 클라이언트를 손상시키지 않기 위해 protobuf 직렬화 된 유형을 변경할 때주의해야 할 사항

분류에서Dev

.NET XML 직렬화 / 역 직렬화를 제어하여 요소를 제외하는 방법, MS 클래스 일 때 XMLIgnore 등을 추가하기 위해 소스를 편집 할 수 없음

분류에서Dev

구조체의 int 멤버를 char *로 캐스팅하여 직렬화하면 역 직렬화 할 때 int * 형식으로 캐스팅해야합니까?

분류에서Dev

PyYAML로 객체를 직렬화 할 때 멤버를 무시하려면 어떻게해야합니까?

분류에서Dev

ArduinoJSON 직렬화는 char *로 직렬화 할 때 빈 문자열을 반환합니다.

분류에서Dev

왜 GSON 직렬화 할 때이 겉으로는 동일한 HashMaps을 다른 행동을해야합니까?

분류에서Dev

django-rest-framework-gis를 사용하여 외래 키 객체를 geojson으로 직렬화 할 때 오류 발생

분류에서Dev

XML 문자열을 클래스로 역 직렬화 할 때 새 xml 키를 보존하고 일부 값을 수정 한 다음 다시 직렬화하는 방법

분류에서Dev

직렬화 할 때 '이름'속성을 수동으로 설정하는 방법

분류에서Dev

JSON을 개체로 역 직렬화 할 때 발생하는 .NET Web API 문제

분류에서Dev

PropertyName을 속성 유형으로 직렬화 할 때 발생하는 문제

분류에서Dev

Rails API에 POST 요청을 할 때 날짜 필드를 포맷하는 방법

분류에서Dev

json-glib는 gobject_serialize를 사용할 때 false 값으로 부울을 직렬화합니다.

분류에서Dev

중첩 된 다른 목록을 기준으로 중첩 된 목록을 정렬하려고 할 때 발생하는이 오류를 어떻게 해결할 수 있습니까?

분류에서Dev

dart에서 중첩 된 해시 맵을 사용할 때 현재 중첩 된 맵에 도달하기 위해 일련의 키를 추적하는 방법은 무엇입니까?

분류에서Dev

JSON을 C #으로 역 직렬화 할 때 요소 이름 변경을 처리하는 방법

분류에서Dev

Jackson을 사용하여 나열 할 중복 키를 역 직렬화

분류에서Dev

공개 키를 직렬화 할 때 "키 데이터를 역 직렬화 할 수 없습니다"

분류에서Dev

NSJSONSerialization을 사용하여 json에서 이미지 역 직렬화

분류에서Dev

Json.Net을 사용하여 DataSet으로 역 직렬화 할 때 ArgumentOutOfRange 예외

분류에서Dev

Spark에서 직렬화 오류를 방지하기 위해 직렬화 할 수없는 개체 분리

분류에서Dev

강력한 형식의 개체로 JSON 응답을 직접 역 직렬화 할 때 필드를 피하는 방법은 무엇입니까?

분류에서Dev

Dart에서 CORS를 사용하여 HTTP POST 요청을 할 때 401 받기

분류에서Dev

Cloudconvert-API를 통해 업로드하기 위해 요청 약속을 사용할 때 잘못된 서명 오류

분류에서Dev

REST API를 통해 프로젝트를 생성하기 위해 JIRA에 POST 요청을 보내는 방법

분류에서Dev

Java에서 직렬화 할 때 @JsonProperty를 무시하는 방법

Related 관련 기사

  1. 1

    POST 요청 C #을 위해 JSON을 JSON 배열 (중첩 JSON)로 직렬화

  2. 2

    XHR로 HTTP POST 또는 PUT 요청을 할 때 상태를 확인해야합니까?

  3. 3

    iOS NSJSONSerialization을 사용하여 POST 요청에서 JSON 데이터 보내기

  4. 4

    기존 클라이언트를 손상시키지 않기 위해 protobuf 직렬화 된 유형을 변경할 때주의해야 할 사항

  5. 5

    .NET XML 직렬화 / 역 직렬화를 제어하여 요소를 제외하는 방법, MS 클래스 일 때 XMLIgnore 등을 추가하기 위해 소스를 편집 할 수 없음

  6. 6

    구조체의 int 멤버를 char *로 캐스팅하여 직렬화하면 역 직렬화 할 때 int * 형식으로 캐스팅해야합니까?

  7. 7

    PyYAML로 객체를 직렬화 할 때 멤버를 무시하려면 어떻게해야합니까?

  8. 8

    ArduinoJSON 직렬화는 char *로 직렬화 할 때 빈 문자열을 반환합니다.

  9. 9

    왜 GSON 직렬화 할 때이 겉으로는 동일한 HashMaps을 다른 행동을해야합니까?

  10. 10

    django-rest-framework-gis를 사용하여 외래 키 객체를 geojson으로 직렬화 할 때 오류 발생

  11. 11

    XML 문자열을 클래스로 역 직렬화 할 때 새 xml 키를 보존하고 일부 값을 수정 한 다음 다시 직렬화하는 방법

  12. 12

    직렬화 할 때 '이름'속성을 수동으로 설정하는 방법

  13. 13

    JSON을 개체로 역 직렬화 할 때 발생하는 .NET Web API 문제

  14. 14

    PropertyName을 속성 유형으로 직렬화 할 때 발생하는 문제

  15. 15

    Rails API에 POST 요청을 할 때 날짜 필드를 포맷하는 방법

  16. 16

    json-glib는 gobject_serialize를 사용할 때 false 값으로 부울을 직렬화합니다.

  17. 17

    중첩 된 다른 목록을 기준으로 중첩 된 목록을 정렬하려고 할 때 발생하는이 오류를 어떻게 해결할 수 있습니까?

  18. 18

    dart에서 중첩 된 해시 맵을 사용할 때 현재 중첩 된 맵에 도달하기 위해 일련의 키를 추적하는 방법은 무엇입니까?

  19. 19

    JSON을 C #으로 역 직렬화 할 때 요소 이름 변경을 처리하는 방법

  20. 20

    Jackson을 사용하여 나열 할 중복 키를 역 직렬화

  21. 21

    공개 키를 직렬화 할 때 "키 데이터를 역 직렬화 할 수 없습니다"

  22. 22

    NSJSONSerialization을 사용하여 json에서 이미지 역 직렬화

  23. 23

    Json.Net을 사용하여 DataSet으로 역 직렬화 할 때 ArgumentOutOfRange 예외

  24. 24

    Spark에서 직렬화 오류를 방지하기 위해 직렬화 할 수없는 개체 분리

  25. 25

    강력한 형식의 개체로 JSON 응답을 직접 역 직렬화 할 때 필드를 피하는 방법은 무엇입니까?

  26. 26

    Dart에서 CORS를 사용하여 HTTP POST 요청을 할 때 401 받기

  27. 27

    Cloudconvert-API를 통해 업로드하기 위해 요청 약속을 사용할 때 잘못된 서명 오류

  28. 28

    REST API를 통해 프로젝트를 생성하기 위해 JIRA에 POST 요청을 보내는 방법

  29. 29

    Java에서 직렬화 할 때 @JsonProperty를 무시하는 방법

뜨겁다태그

보관