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

时间:2013-06-21 12:52:25

标签: php ios json web-services

我熟悉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。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

有几点想法:

  1. 您的JSON无效。你有一个额外的逗号。请查看JSON Lint

  2. 您应该百分之百地转义您的网址参数,因为网址中不允许使用空格等字符。您可以使用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,并且一切正常。