ios - 如何在 Objective-C/iOS 中的客户端上创建虚拟 JSON 数据?

标签 ios objective-c json nsdictionary foundation

我想在 JSON 中设置静态虚拟数据,供我的应用程序处理。这纯粹是客户端;我不想从网络中检索任何内容。

到目前为止,我看到的所有问题和答案都有 NSData* 变量存储从网络调用中检索到的内容,并且 [JSONSerialization JSONObjectWithData: ...] 通常作用于非手动创建的数据。

这是我在 xcode 中尝试过的示例。

NSString* jsonData = @" \"things\": [{ \
\"id\": \"someIdentifier12345\", \
\"name\": \"Danny\" \
\"questions\": [ \
    { \
        \"id\": \"questionId1\", \
        \"name\": \"Creating dummy JSON data by hand.\" \
    }, \
    { \
        \"id\": \"questionId2\", \
        \"name\": \"Why no workie?\"
    } \
    ], \
\"websiteWithCoolPeople\": \"http://stackoverflow.com\", \
}]}";

NSError *error;
NSDictionary *parsedJsonData = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];

这样的尝试(并试图改变一些事情,比如将 NSString* 转换为 NSData* 从那个 JSON 字符串)在尝试创建该 JSON 数据变量或尝试解析它时产生了空的 parsedJsonData 数据或异常。

如何在我自己的代码中创建虚拟 JSON 数据,以便可以通过解析 JSON 数据的普通基础类对其进行解析?

最佳答案

我会将我的测试 json 保存为应用程序中的单独文件。这样做的好处是您只需复制和粘贴来自 Web 服务的响应并轻松阅读它们,而无需将它们转换为 NSDictionaries 或转义字符串。

我已正确格式化您的 JSON(使用 jsonlint)并将其保存到应用程序包中名为 testData.json 的文件中。

{"things":
    [{
     "id": "someIdentifier12345",
     "name": "Danny",
     "questions": [
                   {
                   "id": "questionId1",
                   "name": "Creating dummy JSON data by hand."
                   },
                   {
                   "id": "questionId2",
                   "name": "Why no workie?"
                   } 
                   ], 
     "websiteWithCoolPeople": "http://stackoverflow.com" 
     }]
}

然后,为了在您的应用中解析此文件,您只需从捆绑目录加载该文件即可。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"testdata" ofType:@"json"];
NSData *jsonData = [[NSData alloc] initWithContentsOfFile:filePath];

NSError *error = nil;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

NSLog(@"%@", jsonDict);

现在可以很容易地扩展它来加载任意数量的响应,并且基本上拥有一个本地网络服务。然后,将其调整为从远程服务器加载响应将不会有太多工作要做。

关于ios - 如何在 Objective-C/iOS 中的客户端上创建虚拟 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15667121/

相关文章:

html - 通过 UIWebView 从网页中在 Safari 中打开链接

ios - NSData 即使被使用也会被释放

ios - 从应用程序内赠送特定应用程序

iphone - iOS:从 Nib 加载自定义 UIView

php - 是否可以使用 json_encode 检测 key 类型?

asp.net - 如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果

java - 如何生成java实例的完整json字符串

ios - 如何将 UILabel 文本的英语更改为西类牙语

objective-c - 在 Objective-C 中实现分水岭分割

objective-c - Apple 的服务实现指南 - 示例代码不起作用