I am converting an Array of NSDictionaries to JSON data with the following...
Create my data...
NSMutableArray *arrayOfDicts = [[NSMutableArray alloc] init];
for (int i = 0; i < 2; i++) {
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"MySong", @"title",
@"MyArtist", @"artist",
nil];
[arrayOfDicts addObject:dict];
}
NSArray *info = [NSArray arrayWithArray:arrayOfDicts];
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:info
options:NSJSONWritingPrettyPrinted error:&error];
then send like so...
NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/index.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:jsonData forKey:@"songs"];
[request setDelegate:self];
request.tag = TAG_LOAD_SONGS;
[request startAsynchronous];
This is sending the NSData to my server, but how do I then use it in php... Its really just a bunch of random numbers if I print it from my server, and I have tried using json_encode but I dont think thats meant for raw data...
Any help would be great!
EDIT: Here is the Response of php...
echo $_POST['songs'];
<5b0a2020 7b0a2020 20202274 69746c65 22203a20 224d7953 6f6e6722 2c0a2020 20202261 72746973 7422203a 20224d79 41727469 7374220a 20207d2c 0a20207b 0a202020 20227469 746c6522 203a2022 4d79536f 6e67222c 0a202020 20226172 74697374 22203a20 224d7941 72746973 74220a20 207d0a5d>
Here is the response to NSLoging in Xcode...
NSLog(@"Info: %@", info);
Info: ( { artist = MyArtist; title = MySong; }, { artist = MyArtist; title = MySong; } )
Turns out I needed to do it like this:
To Create My data:
NSMutableArray *arrayOfDicts = [[NSMutableArray alloc] init];
for (int i = 0; i < 2; i++) {
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"MySong", @"title",
@"MyArtist", @"artist",
nil];
[arrayOfDicts addObject:dict];
}
NSArray *info = [NSArray arrayWithArray:arrayOfDicts];
And Sent it like this:
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:info
options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
// Start request
NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/index.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:jsonString forKey:@"songs"];
[request setDelegate:self];
[request startAsynchronous];
The key was to convert the info to NSData
, then to a JSON String which I sent to my server, not just sending the raw NSData
.
Thanks everyone for the help!
<?php $array = json_decode($_POST['songs']); ?>
should work.
You can't send it this way. NSJSONSerialization is for iOS use. It is basically a plist. You will need a way to decode it on PHP and I doubt it exists. Instead, you need to send a JSON string. I am not sure what you mean by "leaves quotes around titles." What are they doing there in the first place? Can you verify your original JSON string here?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With