3

我今天有一个相当简单的问题。我有一个应用程序需要以 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];

这是服务器所期望的(但未收到):

{
"geo": {
    "lat": "37.78",
    "lon": "-122.40"
}

我确定这是一个简单的 JSON 格式问题,或者我的 numskull 移动。

任何帮助都将受到赞赏!

4

2 回答 2

11

你正在以艰难的方式做到这一点。创建一个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);
}

根本不需要字符串。

编辑:如果您的真实数据是对象数组,则创建字典数组或您需要的任何结构。其余的都是一样的。

于 2013-05-22T18:31:27.470 回答
-4

你少了一个分号。检查以下:

   {
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。

于 2013-05-22T17:56:33.710 回答