2011-06-08 40 views
0

我從Web服務接收json到NSMutableData中。iphone objective-c:json反序列化的NSData轉換字符串

使用TouchJson將其轉換爲NSDictionary。

NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:responseData error:&error]; 
NSString *strData = [dictionary objectForKey:@"cars"]; 

然後,我從該字典的鍵中檢索一個字符串。

的字符串看起來像下面

 { 
     b = "http://schemas.datacontract.org/"; 
     car =  (
        { 
       "car_name" = "Honda Civic"; 
       year = 2011; 
       "dealer" = "local honda dealer"; 
       "bought on" = { 
        nil = 1; 
       }; 
       "license_number" = 1234567; 
       status = ReadyToGo; 
      } 
)}; 

本質上可以有「N」對「車」鑰匙記錄。

,當我嘗試使用

NSData *jsonData = [strData dataUsingEncoding:NSUTF8StringEncoding]; 

NSData *jsonData = [strData dataUsingEncoding:[NSString defaultCStringEncoding]]; 

,但我得到上述轉換爲NSData的

[__NSCFDictionary dataUsingEncoding:]: unrecognized selector sent to instance 0x532bb70 

我已經嘗試了一些其他編碼可用,Xcode中仍然拋出。

如何找出正在使用的編碼?

這是我第一次嘗試在objective-c中取消實現json。

我在這裏錯過/做錯了什麼?

感謝

回答

1

我認爲這不是一個字符串在所有....

改變這一點,並測試....

NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:responseData error:&error]; 
NSDictionary *carsDictionary = [dictionary objectForKey:@"cars"]; 
NSArray *arrayOfCarDictionaries = [carsDictionary objectForKey:@"car"]; 
+0

我會給一個嘗試。我後來要將NSData轉換爲另一個字典,並提取「汽車」關鍵字的值,然後使用touchjson將其反序列化。這是否是錯誤的方式? – 2011-06-08 16:03:38

+0

是的,json反序列化器處理對象和子對象,所以它們已經被正確解碼。所有對象和子對象都應該是字典,數組或鍵/值對。 – NWCoder 2011-06-08 16:04:59

+0

這工作!!!。謝謝。首先,我想我不得不餵它特定的部分來反序列化。其次是什麼讓我感到震驚的是,以下工作:NSString * strData = [字典objectForKey:@「cars」]; NSLog(@「cars:%@」,strData);這給我一個印象,我收到一個字符串的密鑰。 – 2011-06-08 16:10:07

相關問題