gpt4 book ai didi

iphone - 无法访问 Objective-C 中的 JSON 数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:46:23 25 4
gpt4 key购买 nike

好的,这是我在 Objective-C 中使用 JSON 的第一种方法(我对最后一种方法也很陌生)。我要获取存储在我的 json 中的信息,以便在 Objective-C 中使用它们,但是当尝试加载它时,我从 NSLog(@"%@",allData); 得到 null 作为响应。谁能告诉我我做错了什么?预先感谢您的时间和耐心。哦,如果需要,这里是 json: http://jsonviewer.stack.hu/#http://conqui.it/ricette.json

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"json"];

NSError *error = nil;

NSMutableData *JSONData = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:&error];
NSLog(@"%@",JSONData);


NSArray *allData = [NSJSONSerialization JSONObjectWithData:JSONData options:0 error:nil];
NSLog(@"%@",allData);

for (NSDictionary *diction in allData) {
NSString *recipe = [diction objectForKey:@"recipe"];

[array addObject:recipe];
}

NSLog(@"%@",array);

最佳答案

JSONObjectWithData 方法有一个 error 参数,您可以利用它来诊断问题。例如:

NSError *error = nil;
NSArray *allData = [NSJSONSerialization JSONObjectWithData:JSONData
options:0
error:&error];
if (error)
NSLog(@"%s: JSONObjectWithData error: %@", __FUNCTION__, error);

在您的评论中,您建议您收到有关“字符 414 周围的未转义控制字符”的错误。这表明 JSON 本身存在错误,您可能希望通过复制到 http://jsonlint.com/ 来验证它。并查看它是否报告任何问题。

在回答有关是否存在任何 Objective-C 问题的更广泛问题时,本身没有编码错误。我无法对 for 发表评论循环,它清楚地假设 allData 是一个字典数组,如果没有看到 JSON,我无法证明这一点。但我会相信你的话。但是,是的,Objective-C 代码看起来不错(尽管在检查返回值类型和错误对象方面有一些亮点)。

例如,如果您想要一些可以在开发过程中使用的诊断断言语句,您可以这样做:

NSArray *allData = [NSJSONSerialization JSONObjectWithData:JSONData options:0 error:nil];
NSAssert(error, @"%s: JSONObjectWithData error: %@", __FUNCTION__, error);

NSLog(@"%s: array=%@", __FUNCTION__, array);

NSAssert([allData isKindOfClass:[NSArray class]], @"allData is not an array");

for (NSDictionary *diction in allData) {
NSAssert([diction isKindOfClass:[NSDictionary class]], @"%s: diction is not a dictionary (%@), __FUNCTION__, diction);

NSString *recipe = [diction objectForKey:@"recipe"];

NSAssert(recipe, @"%s: Did not find recipe key in diction (%@)", __FUNCTION__, diction);

[array addObject:recipe];
}

如果这些错误中的任何一个可能是生产中的运行时错误,您可以将 assert 语句替换为执行必要错误处理的 if 语句。但希望它能说明这个概念。

关于iphone - 无法访问 Objective-C 中的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17516271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com