繁体   English   中英

将JSON字符串从iOS应用程序传递到PHP Webservice

[英]Passing JSON string from iOS application to PHP Webservice

我熟悉iOS / Xcode开发,现在尝试开发自己的Web服务。 不幸的是,我一直在努力将JSON字符串从我的iOS应用程序传递到PHP页面的最佳方法。

在xcode中,我创建一个类似于以下内容的JSON字符串:

{"email" : "",  "name" : "Test Rest",}

然后,我要创建一个URL (GET)

//localhost/index.php?method=createRestaurant&json={"email" : "",  "name" : "Test Rest",}

我正在尝试使用NetBeans调试PHP,但是NetBeans和iOS均因URL错误或无效字符错误而失败,从我的猜测来看,正是{}失败的JSON字符。

如果我使用Chrome PostMan并发布相同的URL,则它可以正常工作,这证明PHP可以正常工作/正在执行我需要做的事情。

因此,总而言之,在URL中包括JSON数据的最佳方法是需要在XCode中进行更改以影响JSON编码的方式吗?

  NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myDictionary options:NSJSONWritingPrettyPrinted  error:&error];
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

在理想的情况下,我应该使用Java,但是由于速度,环境成本等原因,我试图使我的系统使用PHP。 解决方案完成后,我将着手将解决方案移植到Java。

谢谢你的帮助。

一些想法:

  1. 您的JSON无效。 那里有一个逗号。 使用JSON Lint进行检查。

  2. 您应该对URL参数进行百分比转义,因为URL中不允许使用空格之类的字符。 您可以使用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之前,在JSON字符串上使用stringByAddingPercentEscapesForURLParameterUsingEncoding 或者,您可以自己调用CFURLCreateStringByAddingPercentEscapes

我会使用POST方法,然后在您的php脚本中简单地将其打印出来进行调试。

调试输出将是这样的:

$ json = json_decode($ _ POST ['json']); print_r($ json);

您可以通过更改URL来通过GET请求来过去数据,如下所示:

//localhost/index.php?method=createRestaurant&email=emailData&name=TestData

或者您可以通过POST变量中的POST请求发送数据。

感谢您的所有建议,我现在已经从GET更改为POST,并且一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM