2013-06-13 2 views
0

CouchDB 서버에 HTTP PUT 요청을하려고합니다. NSString 인스턴스를 NSData로 변환 중입니다. 그런 다음이 NSData 인스턴스를 NSArray로 변환하고이를 CouchDB에 PUT하려고 시도합니다. 이 같은 뭔가 :; :[]에 포장하지 않고 JSON을 직렬화하십시오.

//convert string to NSData 
    NSData *docData = [@"{\"name\":\"nick\"}" dataUsingEncoding:NSUTF8StringEncoding]; 
//NSData to NSArray 
    NSArray *arrayJson = [NSArray arrayWithObjects:[NSJSONSerialization JSONObjectWithData:docData options:kNilOptions error:nil],nil]; 

그때 AFNetworking를 사용하여 HTTP PUT 요청을 만드는 오전은 (BTW RAD 인))

문제는이 모습 JSON 문자열을 생성하는 것입니다

[{"name":"nick"}] 

이것은 유효한 JSON이지만 소파는 400 개의 잘못된 JSON으로 불평합니다. []를 제거하면 문제가 해결됩니다. 이 괄호는 NSArray NSArray로 변환 한 결과가 있지만 NSJSONSerialization 사용하여이를 수행하는 다른 방법을 잘 모르겠습니다 확신합니다. 누구든지 도와 줄 수 있습니까?

감사합니다.

편집 선명도를 위해서

은 제가 더 가지고 있던 문제를 설명 할 수 있습니다. PUT HTTP 요청을 사용하여 CouchDB HTTP API를 사용하여 문서를 작성 중입니다. 이 문서는 손으로 코딩 된 JSON 일 수 있습니다. 그래서이 파싱 문제가 있습니다. 소파는 단일 문서를 만들 것을 기대합니다. 따라서 단일 JSON 객체가 필요합니다. 그것들의 배열이 아닙니다. 그게 [{ "key": "value"}]가 Couch로부터 400 HTTP 응답을 반환하는 이유입니다. 배열에 단일 객체가 포함 된 경우에도 마찬가지입니다. API가 배열 길이를 기반으로 정확하게 추론하지 않는다는 것이 다소 까다 롭습니다.하지만 어느 쪽이든 변론 할 수는 있습니다. 아래에서 선택한 답변을 참조하십시오. 이것이 제가 찾고 있던 것입니다. 응답 한 모든 사람들에게 감사드립니다!

+0

보낼 실제 데이터는 어디에서 생성합니까? 왜 NSArray를 사용해야합니까? – borrrden

+0

NSArray를 사용하지 않을 것입니다. HTTP 본문에 JSON을 다음과 같이 포함하고 싶습니다. { "name": "nick"}. 다른 방법으로 JSON 문자열을 deserialize 할 수 있습니까? 어떻게 든 NSDictionary에 직접? – Nick

+2

문제가 무엇인지 이해하지 못합니다. 위의'docData'를 서버에 보낼 수 있어야합니다. 올바른 JSON 문자열입니다. – borrrden

답변

1

NSJSONSerialization은 Foundation 개체에서 문자열로 변환 할 수 있습니다. 이렇게하면 적절한 이스케이프가 보장되어 코드를보다 쉽게 ​​읽을 수 있습니다. 위의 샘플에서와 같이 키 - 값 쌍을 경우
, 당신은 할 수 :

NSError* error = nil; 
NSDictionary* jsonDict = @{@"name": @"nick"}; 
NSData* putData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:&error]; 

당신은 추가 배열을 포장하지 않고, 직접 PUT 요청의 내용에 그것을 넣어 할 수 있어야한다 . 요청을 처리하는 엔드 포인트 배열을 전송해야하는 경우, 당신은 재단 개체 (NSArray)와 같은 배열을 작성하고 서버로 보내기 전에 JSON으로 그 직렬화해야

NSArray* jsonArray = @[@{@"name": @"nick"}]; 

질문의 제목 "역 직렬화 JSON은 []에 포장없이"입니다는 - 그 "[]에 포장없이 직렬화 JSON"을해야하지?
질문을 오해 한 경우 다시 변경하십시오.

+0

아니요 .. 정확한 편집이라고 생각합니다. 고맙습니다! 이것이 제가 찾고 있던 것입니다. 나는 무언가를하기 시작했다. 어느 루프를 통해 배열을하고 수동으로 NSDictionary를 만들 수 있습니다. 이것은 훨씬 적은 작업과 훨씬 더 가독성이 있습니다. +1. 고마워. – Nick

+0

당신은 오신 것을 환영합니다. –