好的,我需要在我的 iOS 应用程序上使用 json 来向我的服务器发送数据/从我的服务器接收数据。问题是我对 json 文件的外观有点困惑。 我需要发送到服务器的 json 文件看起来像这样:
NSString *jsonString = @"{\"eventData\":{\"eventDate\":\"Jun 13, 2012 12:00:00 AM\",\"eventLocation\":{\"latitude\":43.93838383,\"longitude\":-3.46},\"text\":\"lalalala\",\"imageData\":\"raw data\",\"imageFormat\":\"JPEG\",\"expirationTime\":1339538400000},\"type\":\"ELDIARIOMONTANES\",\"title\":\"accIDENTE\"}";
当我尝试在控制台中打印时,我得到:
jsonString: {"eventData":{"eventDate":"Jun 13, 2012 12:00:00 AM","eventLocation":{"latitude":43.93838383,"longitude":-3.46},"text":"lalalala","imageData":"raw data","imageFormat":"JPEG","expirationTime":1339538400000},"type":"ELDIARIOMONTANES","title":"accIDENTE"}
根据在线 json 验证器,这似乎是一种有效的 json 格式。
但是,在搜索网络之后,当然还有 stackoverflow,并且问了另一个关于这个的问题之后,我发现我应该将上面的 NSString 转换为这样的 json 文件:
NSString *jsonString = @"{\"eventData\":{\"eventDate\":\"Jun 13, 2012 12:00:00 AM\",\"eventLocation\":{\"latitude\":43.93838383,\"longitude\":-3.46},\"text\":\"lalalala\",\"imageData\":\"raw data\",\"imageFormat\":\"JPEG\",\"expirationTime\":1339538400000},\"type\":\"ELDIARIOMONTANES\",\"title\":\"accIDENTE\"}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *e;
NSMutableArray *jsonList = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&e];
但是如果我尝试打印 jsonList 变量,我认为它是 json 格式/文件,我得到这个:
jsonList: {
eventData = {
eventDate = "Jun 13, 2012 12:00:00 AM";
eventLocation = {
latitude = "43.93838383";
longitude = "-3.46";
};
expirationTime = 1339538400000;
imageData = "raw data";
imageFormat = JPEG;
text = lalalala;
};
title = accIDENTE;
type = ELDIARIOMONTANES;
}
这不是一个有效的 json 文件!!!!所以我的问题是,如果我从一开始就拥有正确的 json 文件格式,为什么所有这些额外的代码都将其“转换”为 json?我想,我一定是在这里遗漏了一些东西或者误解了代码的功能。 非常感谢您阅读我的帖子:)
最佳答案
我认为你有点陷入困境:-) 如果你有一个 NSString 包含你想要发送的数据,那么使用 JSONObjectWithData 等是没有意义的,你也可以发送您已经拥有的字符串。
但是,如果您想从服务器中提取以 JSON 格式接收的数据位,那么您就需要使用这些方法。从已解析的 JSON 对象中获取数据要容易得多,也更可靠,而不仅仅是一个大的旧纯 JSON 字符串(正则表达式不是从 JSON 中提取数据的好方法)。
另一种情况是您希望在代码中构建一个庞大而复杂的 JSON 对象,然后将其作为 JSON 字符串发送到您的服务器。你不想通过将 NSStrings 附加在一起来尝试这个(很快变得讨厌)最好将你的数据放在 NSMutableArrays 或 NSDictionaries 中然后转换为 JSON。
这是一个简单的例子(来自 here)
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:@"test@test.com", @"user",@"mypass", @"pass", nil];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:NSJSONWritingPrettyPrinted error:&writeError];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON Output: %@", jsonString);
关于ios - 在 iOS 上使用 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11186165/