2011-06-08 39 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

相关问题