I have two arrays in objective C. Their data structures are as follows:
{"index":"1","lastName":"Brown","firstName":"Kathy","company":"ABC inc."},
{"index":"2","lastName":"Smith","firstName":"Mike","company":"XYZ inc."}
and
{"index":"1","make":"Toyota","model":"RAV4","year":"2009"},
{"index":"2","make":"Honda","model":"Pilot","year":"2012"}
My task is putting these two arrays into one json NSData object. Meanwhile, in the json data, I should assign the name "People" to the first type of array entities, and "Car" to the second type of array entities, so later on on the php side, I should be able to tell which is which and put them into different tables respectively. Could you help me find the right way to generate the desired json object?
You can take your two arrays and then build a new dictionary with two keys, people
and cars
, using your two arrays as the values associated with those two keys. For example:
NSArray *people = @[@{@"index":@"1",@"lastName":@"Brown",@"firstName":@"Kathy",@"company":@"ABC inc."},
@{@"index":@"2",@"lastName":@"Smith",@"firstName":@"Mike",@"company":@"XYZ inc."}];
NSArray *cars = @[@{@"index":@"1",@"make":@"Toyota",@"model":@"RAV4",@"year":@"2009"},
@{@"index":@"2",@"make":@"Honda",@"model":@"Pilot",@"year":@"2012"}];
NSDictionary *fullDictionary = @{@"people": people, @"cars": cars};
NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:fullDictionary options:0 error:&error];
The resulting JSON (formatted so you can read it more easily) would look like:
{
"cars" : [
{
"model" : "RAV4",
"year" : "2009",
"make" : "Toyota",
"index" : "1"
},
{
"model" : "Pilot",
"year" : "2012",
"make" : "Honda",
"index" : "2"
}
],
"people" : [
{
"lastName" : "Brown",
"firstName" : "Kathy",
"company" : "ABC inc.",
"index" : "1"
},
{
"lastName" : "Smith",
"firstName" : "Mike",
"company" : "XYZ inc.",
"index" : "2"
}
]
}
To send that request, you could do something like the following:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
request.HTTPBody = data;
request.HTTPMethod = @"POST";
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// check for fundamental networking error (e.g. not connected to Internet)
if (error) {
NSLog(@"error = %@", error);
return;
}
// also check to see if the server reported some HTTP error
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
if (statusCode != 200) {
NSLog(@"statusCode = %ld", (long)statusCode);
return;
}
}
// OK, if we've gotten here, let's parse the response; I'm assuming you'll send JSON response; so parse it
NSError *parseError;
NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
if (parseError) {
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"responseString = %@", responseString);
} else {
NSLog(@"responseObject = %@", responseObject);
}
}];
[task resume];
And in PHP, to parse this response you can do something like:
<?php
header("Content-Type: application/json");
$handle = fopen("php://input", "rb");
$raw_post_data = '';
while (!feof($handle)) {
$raw_post_data .= fread($handle, 8192);
}
fclose($handle);
$json_data = json_decode($raw_post_data, true);
$people = $json_data["people"];
$cars = $json_data["cars"];
foreach ($people as $person) {
$index = $person["index"];
$last_name = $person["lastName"];
$first_name = $person["firstName"];
$company = $person["company"];
// use these four variables to insert row of data here; note, make sure you either use
// `mysqli::real_escape_string` or that you manually bind these values to `?` placeholders
}
foreach ($cars as $car) {
$index = $car["index"];
$make = $car["make"];
$model = $car["model"];
$year = $car["year"];
// again, use these four variables to insert row of data here; note, make sure you either use
// `mysqli::real_escape_string` or that you manually bind these values to `?` placeholders
}
// obviously, if we had errors above, we'd send something like Array("success" => false, ...) with error messages and error codes
$response = Array("success" => true);
echo json_encode($response);
?>
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