我想在 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/