使用一个API(我正在编写),我需要从运行PHP的服务器上使用JSON返回一个相当简单的数组,以供在Objective-C中使用。
在电话上,代码将添加到以下形式的数组中:
NSArray *carPics =@[@[@"ford",@"ford.png"],@[@"bmw",@"bmw.png"];
我可以通过转义所有特殊字符来将上面的内容作为字符串返回JSON-有点乏味但可能的是,或者将特殊字符替换为魔术字符串(例如***)。然后使用:
将字符串作为数组NSArray *arr = [str componentsSeparatedByString:@"***"];
另一方面,我可以用PHP创建一个数组并将该数组返回给手机,然后将其转换为Objective-C。
$carpics = array(
array(
"ford" => "ford.png",
"bmw" => "bmw.png",
);
它的缺点是它将涉及更多的转化。
是更好的方法,还是它们中的六种?
修改
当前服务器发送的JSON如下:
{"carpics":{"ford":"ford.png","bmw":"bmw.png"}}
我正在尝试使用以下方法在手机上对其进行解码:
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:jsonFeed
options:kNilOptions
error:&error];
NSMutableArray *carPics = [[json objectForKey:@"carpics"]mutableCopy];
NSArray *myArray = carPics;
这很好。我已经证实json是字典。不幸的是,我还使用kindOfClass验证了carpics或myArray不是我想要的数组,而是一个字典。
如果我尝试使用以下方法获取myArray的第一个元素:
NSArray *object = myArray[i];
我得到一个错误:
[__NSDictionaryM objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x174449420'
我真的想要一个数组,因为我希望一次一次遍历数组的每个元素。
要使JSON成为适当的数组,我需要做什么。我可以更改来自服务器的JSON,也可以在电话上以不同的方式处理JSON。
以下是创建JSON的PHP代码:
header("Content-Type: application/json");
$ret = array("ford"=>"ford.png","bmw"=>"bmw.png");
echo json_encode(array('carpics'=>$ret));