JSON OBJECTS in Objective C - json

I need to create a json object in the following format in XCode and I've been using XCode 6.
string json = #"{'user': 'Teva',
'password': 'abc123',
'SourceID':1,
'SiteID':1,
'VariableID':1,
'MethodID':1,
'values':[
['2015-01-29 21:00:00',133.0],
['2015-01-29 22:00:00',134.0]
]}";
I tried NSDictonary approach. However, I'm getting the following output:
This is my code.
- (void)viewDidLoad {
[super viewDidLoad];
NSError *error;
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
#"user", #"Teva",
#"password", #"abc123",
#"SourceID", #"1",
#"SiteID", #"1",
#"VariableID", #"1",
#"MethodID", #"1",
#"values", #"[2015-01-29 21:00:00, 134.0], [2015-01-29 22:00:00, 135.0]",
nil];
NSMutableArray * arr = [[NSMutableArray alloc] init];
[arr addObject:jsonDictionary];
NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
NSLog(#"jsonData as string:\n%#", jsonString);
}
I got the following output:
jsonData as string:
[
{
"abc123" : "password",
"1" : "VariableID",
"Teva" : "user",
"[2015-01-29 21:00:00, 134.0], [2015-01-29 22:00:00, 135.0]" : "values",
"campaignCategory" : "MethodID",
"actionDate" : "SiteID",
"dueDate" : "SourceID"
}
]
Anyone help me to get the right json using objective C. Thanks for your help!

This is the answer that I was hoping to get. I hope it might be useful to someone.
-(void)saveDataValue
{
NSMutableArray *matchArray = [NSMutableArray arrayWithObjects:#"2015-01-29 21:00:00", #(134.0), nil];
NSMutableDictionary *contentDictionary = [[NSMutableDictionary alloc]init];
[contentDictionary setValue:#"Teva" forKey:#"user"];
[contentDictionary setValue:#"abc123" forKey:#"password"];
[contentDictionary setValue:#"1" forKey:#"SourceID"];
[contentDictionary setValue:#"1" forKey:#"SiteID"];
[contentDictionary setValue:#"1" forKey:#"VariableID"];
[contentDictionary setValue:#"1" forKey:#"MethodID"];
[contentDictionary setValue:matchArray forKey:#"values"];
NSData *data = [NSJSONSerialization dataWithJSONObject:contentDictionary options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(#"jsonData as string:\n%#", jsonStr);
}
HAPPY CODING... :)

Related

Fetch data using JSON parsing via post method in iOS7 using NSJsonSerialization

I am new to iOS Development. Need help to parse this data using NSJSONSerialization. Data comes via post method.
Data is like this
[
{
"edition_id": "1",
"error": false,
"long_name": "Rajkot",
"message": "RESULT_OK",
"short_name": "RJT"
}
]
and code of my file is like this
NSURL *theURL = [NSURL URLWithString:#"MYURL"];
NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc] init];
[theRequest setURL:theURL];
[theRequest setHTTPMethod:#"POST"];
NSData *allCoursesData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:theRequest]];
NSError *error;
NSMutableDictionary *allCourses = [NSJSONSerialization JSONObjectWithData:allCoursesData options:kNilOptions error:&error];
NSString * uid = #"2"; // variable value
NSString *post = [NSString stringWithFormat:#"uid=%#",uid]; // post variable
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:#"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:#"http://localhost/my/json_post/index.php"]];
[request setHTTPMethod:#"POST"];
[request setValue:postLength forHTTPHeaderField:#"Content-Length"];
[request setValue:#"application/x-www-form-urlencoded;charset=UTF-8" forHTTPHeaderField:#"Content-Type"];
[request setHTTPBody:postData];
NSURLResponse *response;
NSData *POSTReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
/* NSString *theReply = [[NSString alloc] initWithBytes:[POSTReply bytes] length:[POSTReply length] encoding: NSASCIIStringEncoding];
NSLog(#"json Reply : %#", theReply);
*/
NSArray *arr = [NSJSONSerialization JSONObjectWithData:POSTReply options:0 error:nil];
NSLog(#"%#",arr);
NSLog(#"%#",[arr valueForKey:#"id"]); //this is table column name
NSLog(#"%#",[arr valueForKey:#"name"]);
NSLog(#"%#",[arr valueForKey:#"surname"]);
Fetch data using JSON parsing via post method
NSHTTPURLResponse *response = nil;
NSError *error=nil;
NSString *post = [NSString stringWithFormat:#"Key=%#",#"value"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:#"%lu",(unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:#"Your URL"]];
[request setHTTPMethod:#"POST"];
[request setValue:postLength forHTTPHeaderField:#"Content-Length"];
[request setValue:#"application/x-www-form-urlencoded" forHTTPHeaderField:#"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
NSData *conn1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(#"%#",conn1);
NSString *responseString = [[NSString alloc] initWithData:conn1 encoding:NSUTF8StringEncoding];
NSLog(#"here %#",responseString);
if(conn) {
NSLog(#"Connection Successful");
} else {
NSLog(#"Connection could not be made");
}

Swift and parsing JSON into a Dictionary - objectForKey

I have this Objective C code:
NSMutableArray *dataArray = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
NSLog(#"Dictionary = %#",dataArray);
NSMutableArray *venues = [[NSMutableArray alloc] init];
for (NSDictionary *venueDic in dataArray) {
MapPoint *mapPoint = [[MapPoint alloc] init];
mapPoint.name = [venueDic objectForKey:#"name"];
mapPoint.image_path = [venueDic objectForKey:#"image_path"];
[venues addObject:mapPoint];
NSLog(#"Venue Name: %#", mapPoint.name);
}
But I am struggling to translate the FOR loop. I've spent hours already looking for a solution.

Passing param in URL to get json back in IOS

Sorry i am really beginner in IPhone development,i am pulling json data from URL and its pulling and loading data perfectly in UITableView, below is code
- (void)fetchFeed
{
NSString *requestString = #"http://bookapi.bignerdranch.com/courses.json";
NSURL *url = [NSURL URLWithString:requestString];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
self.session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask =
[self.session dataTaskWithRequest:req
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data
options:0
error:nil];
self.courses = jsonObject[#"courses"];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}];
[dataTask resume];
}
Now i want to add filter by instructors, Can any one tell me how i can do that.
Thanks
GET
GET request is just a matter of appending query strings to the API url, for example:
NSString *format = [NSString stringWithFormat:#"http://www.yourapiurl.com?id=%#","123";
NSURL *url = [NSURL URLWithString:format];
NSLog(#"%#",url);
//Creating the data object that will hold the content of the URL
NSData *jsonData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
POST
-(NSData *)post:(NSString *)postParams{
//Build the Request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:#"http://www.yourapiurl.com"]];
[request setHTTPMethod:#"POST"];
[request setValue:[NSString stringWithFormat:#"%lu", (unsigned long)[postParams length]] forHTTPHeaderField:#"Content-length"];
[request setHTTPBody:[postParams dataUsingEncoding:NSUTF8StringEncoding]];
//Send the Request
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
//Get the Result of Request
NSString *response = [[NSString alloc] initWithBytes:[returnData bytes] length:[returnData length] encoding:NSUTF8StringEncoding];
return returnData;
}
usage:
NSString *postString = [NSString stringWithFormat:#"prop1=%#&prop2=%#&prop3=%#",
"value1","value2","value3"];
NSData *JsonData = [self post :postString];
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:JsonData options:NSJSONReadingMutableContainers error:nil];
//then parse the JSON

JSON params POST not recognize with AFNetworking

[Solved]
I'm trying to edit AFHTTPClient.m to make it work with POST Method in
-(NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
like this :
if ([method isEqualToString:#"GET"] ||[method isEqualToString:#"POST"] || [method isEqualToString:#"HEAD"] || [method isEqualToString:#"DELETE"])
I have problem with POST method with params userDevice ,I have function subclass from AFHTTPClient like this
EDIT:
I used different method like this but same result
-(void)loginWithEmail:(NSString *)email password:(NSString *)passwords
{
NSString *baseurl = #"http://localhost.com:9000/";
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:baseurl]];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[httpClient setDefaultHeader:#"Accept" value:#"application/json"];
[httpClient setAuthorizationHeaderWithUsername:email password:passwords];
and then this is my params :
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:
model, #"deviceModel",
systemVersion, #"deviceVersion",
[NSNumber numberWithBool:0], #"productionMode",
appVersion, #"appVersion",
deviceType,#"deviceType", nil];
NSError *error = nil;
NSDictionary* jsonObject = [NSDictionary dictionaryWithObjectsAndKeys:data, #"userDevice", nil];
NSData *jsonLogin =[NSJSONSerialization dataWithJSONObject:jsonObject options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonLoginString = [[NSString alloc] initWithData:jsonLogin encoding:NSUTF8StringEncoding];
NSLog(#"JSON LOGIN OUTPUT :%#", jsonLoginString);
[httpClient setParameterEncoding:AFJSONParameterEncoding];
I request using this code :
NSMutableURLRequest *request = [httpClient requestWithMethod:#"POST"
path:#"/ios/login"
parameters:[NSDictionary dictionaryWithObjectsAndKeys:jsonLoginString,#"userDevice", nil]
];
AFJSONRequestOperation *operation = nil;
operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(#"Response : %#", request);
NSLog(#"JSON: %#",JSON);
}
failure:^(NSURLRequest *request , NSHTTPURLResponse *response, NSError *error , id JSON ){
NSLog(#"error: %#", error);
}];
[operation start];
this is the example json that I wanted :
"userDevice" : {
"appVersion" : "1.0",
"deviceModel" : "iPhone Simulator",
"productionMode" : false,
"deviceType" : "iPhone Simulator",
"deviceVersion" : "6.1"
}
am I missing something?

How do I POST JSON data object to server in iOS5?

I want to send a new object created on iOS to a receiving server with a POST method using JSON data type. From what I know about receiving data from the server in iOS, is that all JSON handling was simplified by Apple with the introduction of iOS 5. But in contradistinction to GETting JSON objects, POSTing those isn't really described anywhere I could find ...
The first steps I took to try and solve the problem looked as follows:
//build an info object and convert to json
NSDictionary *newDatasetInfo = [NSDictionary dictionaryWithObjectsAndKeys:name, #"name", language, #"language", nil];
//convert object to data
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:&error];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:someURLSetBefore];
[request setHTTPMethod:#"POST"];
// any other things to set in request? or working this way?
[[NSURLConnection alloc] initWithRequest:request delegate:self];
// What to do with NSURLConnection? Or how to send differently?
But I really don't know how to send a JSON object to a server using a POST method at all.
Could anybody please help me out?
I worked it out by trying a bit around, here's my code:
//build an info object and convert to json
NSDictionary *newDatasetInfo = [NSDictionary dictionaryWithObjectsAndKeys:name, #"name", language, #"language", nil];
//convert object to data
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:&error];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:someURLSetBefore];
[request setHTTPMethod:#"POST"];
[request setValue:#"application/json" forHTTPHeaderField:#"Content-Type"];
[request setValue:#"application/json" forHTTPHeaderField:#"Accept"];
[request setHTTPBody:jsonData];
// print json:
NSLog(#"JSON summary: %#", [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding]);
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
- (IBAction)txtFetchData2:(id)sender {
NSString *queryString = [NSString stringWithFormat:#"http://example.com/username.php?name=%#", [self.txtName text]];
NSMutableURLRequest *theRequest=[NSMutableURLRequest
requestWithURL:[NSURL URLWithString:
queryString]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSDictionary* jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
#"Value1", #"Key1",
#"Value2", #"Key2",
nil];
NSError *error;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary
options:NSJSONWritingPrettyPrinted error:&error];
[theRequest setHTTPMethod:#"POST"];
[theRequest addValue:#"application/json" forHTTPHeaderField:#"Content-Type"];
// should check for and handle errors here but we aren't
[theRequest setHTTPBody:jsonData];
[NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (error) {
//do something with error
} else {
NSString *responseText = [[NSString alloc] initWithData:data encoding: NSASCIIStringEncoding];
NSLog(#"Response: %#", responseText);
NSString *newLineStr = #"\n";
responseText = [responseText stringByReplacingOccurrencesOfString:#"<br />" withString:newLineStr];
[self.lblData setText:responseText];
}
}];
}
NSString *strUrl = #"URL";
NSURL *url = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
// For set postdata in string
NSString *strPatientID = [NSString stringWithFormat:#"%#%#%#%#",self.txtDegit1.text,self.txtDegit2.text,self.txtDegit3.text,self.txtDegit4.text];
NSString *deviceToken = #"";
postString = [NSString stringWithFormat:#"practiceid=%#&email=%#&password=%#&devicetoken=%#",strPatientID,self.txtUsername.text,self.txtPassword.text,deviceToken];
NSMutableData *httpDataBody = [NSMutableData data];
[httpDataBody appendData:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSString *strPostLength = [NSString stringWithFormat:#"%lu",[httpDataBody length]];
if ([httpDataBody length ] > 0){
[request addValue:#"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:#"Content-Type"];
[request setHTTPMethod:#"POST"];
[request addValue:strPostLength forHTTPHeaderField:#"Content-Type"];
[request setHTTPBody:httpDataBody];
}
urlConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[urlConnection start];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:#"http://webstar52.com/demo/webcommunity/work.php"]]];
NSString *post = [NSString stringWithFormat:#"&tag=%#&user_id=%#",#"getcontact",#"10408"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:#"%d",[postData length]];
[request setHTTPMethod:#"POST"];
[request setValue:postLength forHTTPHeaderField:#"Content-Length"];
[request setValue:#"application/x-www-form-urlencoded" forHTTPHeaderField:#"Current-Type"];
[request setHTTPBody:postData];
conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];