Ios 在Objective-C中发布JSON
今天我有一个相当简单的问题。我有一个应用程序,需要以2D GPS坐标的形式向远程服务器发送一个简单的JSON数组。应用程序将使用CoreLocation框架来生成这些坐标。现在,我想硬编码一些示例坐标以获得正确的JSON。然而,我似乎无法在ObjC代码中正确地形成JSON 代码如下:Ios 在Objective-C中发布JSON,ios,objective-c,json,Ios,Objective C,Json,今天我有一个相当简单的问题。我有一个应用程序,需要以2D GPS坐标的形式向远程服务器发送一个简单的JSON数组。应用程序将使用CoreLocation框架来生成这些坐标。现在,我想硬编码一些示例坐标以获得正确的JSON。然而,我似乎无法在ObjC代码中正确地形成JSON 代码如下: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:myserver/han
NSMutableURLRequest *request =
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http:myserver/handler/index"]];
[request setHTTPMethod:@"POST"];
NSString *jsonString = @"{"
@" \"geo\": {"
@" \"lat\": \"37.78\","
@" \"lon\": \"-122.40";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[request setHTTPBody:jsonData];
(void)[[NSURLConnection alloc] initWithRequest:request delegate:self];
以下是服务器期望的内容(但未收到):
我敢肯定这是一个简单的JSON格式问题,否则numskull会对我造成影响
任何帮助都将受到感激 您缺少一个分号。检查以下内容:
{
geo = {
"-122.40" = lon;
"37.78" = lat;
};
}
理想情况下,您需要这样做:
NSDictionary *positionDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"lat",@"37.78",@"lon",@"-122.40", nil];
NSDictionary *jsonDict = [[NSDictionary alloc] initWithObjectsAndKeys:positionDictionary, @"geo", nil];
然后通过jsonDict。你做这件事很难。创建一个
NSDictionary
,然后将其转换为所需的JSON数据:
NSDictionary *dictionary = @{ @"geo" : @{ @"lat" : @"37.78", @"lon" : @"-122.40" } };
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];
if (jsonData) {
// process the data
} else {
NSLog(@"Unable to serialize the data %@: %@", dictionary, error);
}
根本不需要绳子
编辑:如果您的真实数据是一个对象数组,那么创建一个字典数组或任何您需要的结构。其余的都是一样的。另外,为什么
jsonString=[[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]
?您也可以将数据存储在一个数组中,然后让NSJSONSerialization
为您完成这项工作。所有的否决票是怎么回事?这是一个合理的问题,至少有人试图解决它。@H2CO3-不确定你的意思?这是额外的一步吗?@Ebenezer我的意思是,那条线为什么在那里jsonString
已经是一个NSString。您将其转换为NSData
,然后将NSData
转换回相同的NSString
-为什么?json的格式不是这样的,OP做对了,少了缺少的大括号。Barryjones-似乎不想工作,感谢您的尝试@埃比尼泽-这不是错的,只是不完整。添加另一行:“NSData*JSONData=[NSJSONSerialization dataWithJSONObject:jsonDict选项:0错误:nil];然后传递JSONData。
NSDictionary *dictionary = @{ @"geo" : @{ @"lat" : @"37.78", @"lon" : @"-122.40" } };
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];
if (jsonData) {
// process the data
} else {
NSLog(@"Unable to serialize the data %@: %@", dictionary, error);
}