gpt4 book ai didi

iphone - JSONKit 给出解析错误,但 JSONLint.org 表示它是有效的

转载 作者:行者123 更新时间:2023-11-29 13:16:35 25 4
gpt4 key购买 nike

这是我的 post.json 文件:

[
{
"Title": "Introduction to WCF",
"Url": "http://myaddress/videos/introduction-to-wcf",
"Thumbnail": "http://myaddress/images/20110212_01.jpg",
"Exceprt": "Introduction to WCF",
"PostDate": "2011-02-12T14:26:07",
"Id": 39,
"Mp4Video": "http://myaddress/2012/05/20110212_01.mp4",
"Speakers": [
{
"Name": "Mark Wilkinson",
"Slug": "mark-wilkinson"
}
],
"Groups": [
{
"Name": "C# UG",
"Slug": "cs-ug"
}
],
"Tags": [
{
"Name": "WCF Services",
"Slug": "wcf-services"
}
]
}
]

将其发布到 jsonlint.org 并验证。

这是我一直用于其他有效的 JSON 文件的代码:

- (void)test_can_read_from_groups_file_and_build_JSONDictionary {

id result = [self data_from_JSON_file:@"post"];
[Assert isNotNil:result]; // is returning as nil, so test is failing
}

- (id)data_from_JSON_file:(NSString *)fileName {

NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *jsonString = [bundle pathForResource:fileName ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:jsonString];
JSONDecoder *decoder = [[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone];

NSError *error = nil;
id result = [decoder objectWithData:data error:&error];
if (error) {
NSLog(@"*********\r\r\r\r\r\r\r Error was: %@", [error localizedDescription]);
}

return result;
}

从 JSONKit objectWithData 打印出的错误:

Error was: Unexpected token, wanted '{', '}', '[', ']', ',', ':', 'true', 'false', 'null', '"STRING"', 'NUMBER'.

预计到达时间:是的,它处于构建阶段:

enter image description here

添加:

if (!data)
{
NSLog(@"\r\r\r\r\r\r%s: data was nil", __FUNCTION__);
return nil;
}

它没有到达这个分支,所以数据不为零。

使用 JSONKit 解码器更改为:

id results = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions error:&error];

它有效,但仍然对为什么 JSONKit 对我失败但对 Rob 失败感到困惑。

最佳答案

正如 pst 指出的那样,问题原来是 BOM .在 Xcode 中,如果您右键单击文件名,选择“打开为”并选择“十六进制”,您将看到:

hex dump

前三个字符显然不是标准文本字符。幸运的是,您可以在 Xcode 的十六进制编辑器中突出显示这三个字符,删除它们,保存文件,现在应该可以修复它。


原答案:

此外,您确定 JSON 包含在您的包中吗(检查“目标设置”的“构建阶段”中的“复制包资源”)。我刚刚使用 Cocoa 标准 JSON 解析类解析了您的 JSON, NSJSONSerialization,没有意外。也许你应该尝试检查 data 并确保一切正常:

NSLog(@"data=%@", [[[NSString alloc] initWithData:data] autorelease]);

但我使用 JSONKitNSJSONSerialization 解析了你的 JSON,没有发生任何意外。

NSString *filename = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:filename];
if (!data)
{
NSLog(@"%s: data was nil", __FUNCTION__);
return;
}
JSONDecoder *decoder = [[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone];
NSError *error = nil;
id results = [decoder objectWithData:data error:&error];

// Also tested with NSJSONSerialization
//
// id results = [NSJSONSerialization JSONObjectWithData:data
// options:0
// error:&error];

if (!error)
NSLog(@"%s: results = %@", __FUNCTION__, results);
else
NSLog(@"%s: error = %@", __FUNCTION__, error);

关于iphone - JSONKit 给出解析错误,但 JSONLint.org 表示它是有效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650489/

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