我熟悉iOS / Xcode开发,现在正在尝试开发自己的Web服务。不幸的是,我正在努力将JSON字符串从我的iOS应用程序传递到PHP页面。
在xcode中,我创建了一个类似于:
的JSON字符串{"email" : "", "name" : "Test Rest",}
然后我创建了一个网址(GET)
:
//localhost/index.php?method=createRestaurant&json={"email" : "", "name" : "Test Rest",}
我正在尝试使用NetBeans来调试PHP,但NetBeans和& iOS无法使用错误的URL或无效的字符错误,并且我猜测它是失败的JSON字符{}。
如果我使用Chrome PostMan并发出相同的网址,则可以证明PHP可以正常工作/做我需要做的事情。
总而言之,在URL中包含JSON数据的最佳方法是什么需要在XCode中进行更改,这会影响JSON的编码方式?
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myDictionary options:NSJSONWritingPrettyPrinted error:&error];
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
在一个理想的世界里,我应该使用Java,但由于速度,环境成本等原因,我试图让我的系统使用PHP。解决方案完成后,我将继续将解决方案移植到Java。
感谢您的帮助。
答案 0 :(得分:1)
有几点想法:
您的JSON无效。你有一个额外的逗号。请查看JSON Lint。
您应该百分之百地转义您的网址参数,因为网址中不允许使用空格等字符。您可以使用stringByAddingPercentEscapesUsingEncoding
。或者更好的是,如果您的字符串可能包含一些无法在单个URL参数中使用的其他有效URL字符,则可以使用Core Foundation CFURLCreateStringByAddingPercentEscapes
,这样可以提供更多控制权。我使用NSString类别为这个CoreFoundation函数提供了一个简单的接口:
@implementation NSString (UrlEncode)
+ (NSString *)stringByAddingPercentEscapesFor:(NSString *)string
legalURLCharactersToBeEscaped:(NSString *)legalURLCharactersToBeEscaped
usingEncoding:(NSStringEncoding)encoding
{
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
NULL,
(CFStringRef)legalURLCharactersToBeEscaped,
CFStringConvertNSStringEncodingToEncoding(encoding)
));
}
- (NSString *)stringByAddingPercentEscapesFor:(NSString *)legalURLCharactersToBeEscaped
usingEncoding:(NSStringEncoding)encoding
{
return [NSString stringByAddingPercentEscapesFor:self
legalURLCharactersToBeEscaped:legalURLCharactersToBeEscaped
usingEncoding:encoding];
}
- (NSString *)stringByAddingPercentEscapesForURLParameterUsingEncoding:(NSStringEncoding)encoding
{
return [NSString stringByAddingPercentEscapesFor:self
legalURLCharactersToBeEscaped:@";/?:@&=+$,"
usingEncoding:encoding];
}
@end
因此,您可以在将JSON字符串添加到URL之前使用stringByAddingPercentEscapesForURLParameterUsingEncoding
。或者您可以自己致电CFURLCreateStringByAddingPercentEscapes
。
答案 1 :(得分:0)
我会使用POST方法,然后在php脚本中将其打印出来进行调试。
调试输出将是这样的:
$ json = json_decode($ _ POST ['json']); print_r($ json);
答案 2 :(得分:0)
您可以通过更改URL来通过GET请求过去数据:
//localhost/index.php?method=createRestaurant&email=emailData&name=TestData
或者您可以通过POST变量在POST变量中发送数据。
答案 3 :(得分:0)
感谢您提出的所有建议,我现在已从GET更改为POST,并且一切正常。