Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 无法访问Objective-C中的JSON数据_Iphone_Ios_Objective C_Json - Fatal编程技术网

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

Iphone 无法访问Objective-C中的JSON数据,iphone,ios,objective-c,json,Iphone,Ios,Objective C,Json,好的,这是我在Objective-C中使用JSON的第一种方法,我对最后一种方法也很陌生。我想让信息存储在我的json中,以便在Objective-C中使用它们,但当尝试加载它时,NSLog@%@,allData的响应为null;在…上谁能告诉我我做错了什么?提前感谢您的时间和耐心。 哦,如果需要,这里是json: JSONObjectWithData方法有一个错误参数,您可以利用该参数诊断问题。例如: NSError *error = nil; NSArray *allData = [NSJ

好的,这是我在Objective-C中使用JSON的第一种方法,我对最后一种方法也很陌生。我想让信息存储在我的json中,以便在Objective-C中使用它们,但当尝试加载它时,NSLog@%@,allData的响应为null;在…上谁能告诉我我做错了什么?提前感谢您的时间和耐心。 哦,如果需要,这里是json:

JSONObjectWithData方法有一个错误参数,您可以利用该参数诊断问题。例如:

NSError *error = nil;
NSArray *allData = [NSJSONSerialization JSONObjectWithData:JSONData
                                                   options:0
                                                     error:&error];
if (error)
    NSLog(@"%s: JSONObjectWithData error: %@", __FUNCTION__, error);
在您的评论中,您建议在字符414周围收到一个关于未转义控件字符的错误。这表明JSON本身存在错误,您可能希望通过复制到来验证,并查看它是否报告任何问题

对于是否存在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];
}
如果这些错误中的任何一个可能是生产中的运行时错误,那么您应该用执行必要错误处理的If语句替换assert语句。但希望它能说明这个概念。

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

NSError *error = nil;
NSArray *allData = [NSJSONSerialization JSONObjectWithData:JSONData
                                                   options:0
                                                     error:&error];
if (error)
    NSLog(@"%s: JSONObjectWithData error: %@", __FUNCTION__, error);
在您的评论中,您建议在字符414周围收到一个关于未转义控件字符的错误。这表明JSON本身存在错误,您可能希望通过复制到来验证,并查看它是否报告任何问题

对于是否存在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];
}

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

您的回答中的问题是,字符串值无法连接。因此,我必须手动删除这些选项卡和新行

在五个地方,您会遇到错误,即:

佩拉特

意大利面

波莫多罗

萨波里蒂

\t


您的回答中的问题是,字符串值无法连接。所以,我必须手动删除这些选项卡和新行

在五个地方,您会遇到错误,即:

佩拉特

意大利面

波莫多罗

萨波里蒂

\t


没有什么,因为我只对NSMutableData使用它,它看起来工作正常。我会立即检查是否有错误:2013-07-07 22:57:27.146 prova_lettura_json[5547:c07]error Domain=nscocaerorrordomain Code=3840操作无法完成。可可错误3840。字符414周围的未转义控制字符。UserInfo=0x71870d0{NSDebugDescription=字符414周围未替换的控制字符。}2013-07-07 22:57:27.147 prova_lettura_json[5547:c07]null那么您认为xcode端正确吗?如果是这样的话,非常感谢,在这之后我花了整整一个下午。。我会检查然后让你知道,一旦我得到一个解决方案!一般来说,Xcode对JSON一无所知,也从不使用它。您可能是指Objective-C吗?提示:实际上,请查看错误的值。没有什么,因为我只对NSMutableData使用它,它看起来工作正常。我会立即检查是否有错误:2013-07-07 22:57:27.146 prova_lettura_json[5547:c07]error Domain=nscocaerorrordomain Code=3840操作无法完成。可可错误3840。字符414周围的未转义控制字符。UserInfo=0x71870d0{NSDebugDescription=字符414周围未替换的控制字符。}2013-07-07 22:57:27.147 prova_lettura_json[5547:c07]null那么您认为xcode端正确吗?如果是这样的话,非常感谢,在这之后我花了整整一个下午。。我会检查然后让你知道,一旦我得到一个解决方案!一般来说,Xcode对JSON一无所知,也从不使用它。您可能是指Objective-C吗?提示:请实际查看错误的值。我建议不要在客户端中触及JSON文本本身,而应首先消除创建JSON的根本原因。在实践中,我们永远都不需要这样做
我们自己用JSON文本进行ddle,但会使用一个实用程序,比如NSJSONSerialization来解码和编码。假设响应中有一个JSON字符串,其中有一个制表符,只需从字符串中删除它。您还可以简单地删除控制字符。比方说,该字符串包含一个CRLF:abc\r\ndef-您最终会得到一个JSON字符串,它是abc\\def,被解码为打印abc\def的字符串。我建议不要在客户端中触摸JSON文本本身-而应该消除首先创建JSON的根本原因。实际上,我们不需要自己处理JSON文本,而是使用一个实用程序,比如NSJSONSerialization来解码和编码。假设响应中有一个JSON字符串,其中有一个制表符,只需从字符串中删除它。您还可以简单地删除控制字符。比方说,该字符串包含一个CRLF:abc\r\ndef-您最终得到一个JSON字符串,它是abc\\def,被解码为打印abc\def的字符串。突出显示的部分解决了我的问题。感谢您分享所有可能的解决方案,我很高兴这个答案帮助您诊断出无效JSON确实是您案例中的问题。也许这有助于你准确诊断潜在问题。但我已经删除了你添加的突出显示,因为它使它看起来像是一个引用。在这个回答中,突出显示的部分解决了我的问题。感谢您分享所有可能的解决方案,我很高兴这个答案帮助您诊断出无效JSON确实是您案例中的问题。也许这有助于你准确诊断潜在问题。但我已经删除了你添加的突出显示,因为它使它看起来像是一个引用。在这个回答中,不需要进一步强调。