ios - 在 iOS 上使用 json

标签 ios json format

好的,我需要在我的 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/

相关文章:

ios - 如何知道用户点击了 TextView 的哪一行

python - json.dump() 将类型从 `dict` 更改为 `NoneType`

java - 字符串 Unicode 从字符串中删除字符

python - 打印字符串和 float 时出错

ios - 如何在设备旋转后重新计算约束

ios - iOS模拟器中的文件排列

javascript - 通过 Angular js传递json中的id

javascript - 图像->JSON->.Net 图像

android - 存储gps数据的格式

ios - 我如何继承 UIView?