我想将personArray
转换为JSON字符串,然后向服务器发送请求。
我尝试过类似下面的代码:
@interface Person : NSObject {
NSString *name;
int registered;
}
+ (NSMutableArray *) select;
NSMutableArray *personArray = [Person select];
NSString *json = @"{ \"";//TODO
for (int i =0 ;i < [personArray count]; i++) {
Person *temp = [Person objectAtIndex:i];
[json stringByAppendingFormat:[NSString stringWithFormat:@"\"name\": \"%@\"", temp.name]
}
json = [json stringByAppendingFormat:[NSString stringWithFormat:@"} \""]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:[global userID] forKey:@"user_id"];
[request setPostValue:json forKey:@"json_key"];
[request addRequestHeader:@"Content-type" value:@"application/json"];
[request startSynchronous];
服务器收到以下数据:
{ \"\"name\": \"Tom\"}
服务器代码是:
$json = $_POST['json_key'];
echo $json;
$json = json_decode($json, true);
echo $json; // prints nothing
有没有办法删除斜杠,或者将对象转换为JSON的更漂亮的解决方案?
答案 0 :(得分:1)
在服务器上,您可能已启用magic_quotes_gpc。尝试更像这样的东西:
$json = $_POST['json_key'];
if (get_magic_quotes_gpc()) {
$json = stripslashes($json);
}
echo $json;
$json = json_decode($json, true);
print_r($json);
答案 1 :(得分:1)
为了确保正确生成JSON表示,请使用通用JSON生成器(例如Stig Brautaset的JSON Framewark或yajl-objc)而不是临时转换。
JSON框架:
@interface Person(SBJson)
-(id)proxyForJson;
@end
@implementation Person(SBJson)
-(id)proxyForJson {
return [NSDictionary dictionaryWithObjectsAndKeys:
name,@"name",
[NSNumber numberWithInt:registered],@"registered",
nil];
}
@end
...
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:[[Person select] JSONRepresentation] forKey:@"json_key"];
yajl-objc:
@interface Person(YAJL)
-(id)JSON;
@end
@implementation Person(YAJL)
-(id)JSON {
return [NSDictionary dictionaryWithObjectsAndKeys:
name,@"name",
[NSNumber numberWithInt:registered],@"registered",
nil];
}
@end
...
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:[[Person select] yajl_JSONString] forKey:@"json_key"];
另见:
答案 2 :(得分:0)
NSString *json = @"{ \"";//TODO
和
json = [json stringByAppendingFormat:[NSString stringWithFormat:@"} \""]];
对我来说,看起来很可疑。你在json字符串的开头贴了一个引号,这将导致第一个键“在它前面有一个流浪。”最后只是看起来很虚伪。
答案 3 :(得分:0)
我很惊讶这给了你任何东西。首先,这条线......
[json stringByAppendingFormat:[NSString stringWithFormat:@"\"name\": \"%@\"", temp.name]];
......什么都不做。 stringByAppendingFormat:
基于接收方返回一个新字符串(即json
),它不会修改接收方。此外,您正在创建一个带有格式的新字符串,以使用格式附加到json
;它可以简化为:
json = [json stringByAppendingFormat:@"\"name\": \"%@\"", temp.name];
此外,不是不断创建新字符串并且可能充斥自动释放池,而是使用NSMutableString
代替,并使用执行appendFormat:或appendString:
方法>修改接收器而不是创建新的字符串。
正如其他人所提到的,JSON可能无法正确解码的原因是因为它可能格式不正确,JSON字符串中存在迷路\"
。