Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Objective-C中发布JSON_Ios_Objective C_Json - Fatal编程技术网

Ios 在Objective-C中发布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

今天我有一个相当简单的问题。我有一个应用程序,需要以2D GPS坐标的形式向远程服务器发送一个简单的JSON数组。应用程序将使用CoreLocation框架来生成这些坐标。现在,我想硬编码一些示例坐标以获得正确的JSON。然而,我似乎无法在ObjC代码中正确地形成JSON

代码如下:

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);
}