[objective-c] NSString을 NSDictionary / JSON으로 변환

다음 데이터가 저장되어 있습니다 NSString.

 {
    Key = ID;
    Value =         {
        Content = 268;
        Type = Text;
    };
},
    {
    Key = ContractTemplateId;
    Value =         {
        Content = 65;
        Type = Text;
    };
},

이 데이터를 NSDictionary키 값 쌍을 포함하는 로 변환하고 싶습니다 .

나는 변환 먼저 시도하고 NSStringA를 JSON은 다음과 같이 객체 :

 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

그러나 내가 시도 할 때 :

NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);

나는 값을 NULL.

누구든지 문제가 무엇인지 제안 할 수 있습니까?



답변

키 값에 대한 JSON 형식을 잘못 해석하고 있다고 생각합니다. 문자열을 다음과 같이 저장해야합니다.

NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

이제 다음 NSLog 문을 수행하면

NSLog(@"%@",[json objectForKey:@"ID"]);

결과는 또 다른 NSDictionary가됩니다.

{
    Content = 268;
    type = text;
}

이것이 명확한 이해를 얻는 데 도움이되기를 바랍니다.


답변

나는 당신이 응답에서 배열을 얻는다고 생각하므로 배열에 응답을 할당해야합니다.

NSError * err = nil;
NSArray * array = [NSJSONSerialization JSONObjectWithData : [문자열 dataUsingEncoding : NSUTF8StringEncoding] 옵션 : NSJSONReadingMutableContainers 오류 : & err];
NSDictionary * dictionary = [배열 objectAtIndex : 0]; 
NSString * test = [dictionary objectForKey : @ "ID"];
NSLog (@ "Test is % @", test);


답변

str이 JSON 문자열 인 경우 다음 코드를 사용하십시오.

NSError *err = nil;
NSArray *arr =
 [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding]
                                 options:NSJSONReadingMutableContainers
                                   error:&err];
// access the dictionaries
NSMutableDictionary *dict = arr[0];
for (NSMutableDictionary *dictionary in arr) {
  // do something using dictionary
}


답변

스위프트 3 :

if let jsonString = styleDictionary as? String {
    let objectData = jsonString.data(using: String.Encoding.utf8)
    do {
        let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers)
        print(String(describing: json))

    } catch {
        // Handle error
        print(error)
    }
}


답변

다음 코드를 사용하여 AFHTTPSessionManager실패 블록 에서 응답 개체를 가져옵니다 . 그런 다음 일반 유형을 필수 데이터 유형으로 변환 할 수 있습니다.

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];


답변