[英]Trouble reading JSON object using Obj-C
我正在尝试使用json-framework和obj-C读取以下json对象
{
Sections = {
Now = "Wednesday 9 February 2011 02:40";
Section = (
{
Article = (
{
Exceprt = "text here";
ID = 49011;
Title = "text here";
Type = Politics;
audioCounter = 0;
commentsCounter = 0;
hasMore = false;
important = False;
likesCounter = 0;
photoCounter = 0;
time = "21:12";
timeStamp = "2/8/2011 9:14:16 PM";
timeStatus = True;
videoCounter = 0;
viewsCounter = 0;
},
{
Exceprt = "text here";
ID = 49010;
Title = "text here";
Type = Politics;
audioCounter = 0;
commentsCounter = 0;
hasMore = false;
important = True;
likesCounter = 0;
photoCounter = 0;
time = "20:45";
timeStamp = "2/8/2011 9:10:59 PM";
timeStatus = True;
videoCounter = 0;
viewsCounter = 0;
},
{
Exceprt = "text here";
ID = 49008;
Title = "text here";
Type = Politics;
audioCounter = 0;
commentsCounter = 0;
hasMore = false;
important = False;
likesCounter = 0;
photoCounter = 0;
time = "20:28";
timeStamp = "2/8/2011 9:09:44 PM";
timeStatus = True;
videoCounter = 0;
viewsCounter = 0;
}
);
ID = 22;
Name = "EN Live";
totalNews = 3416;
}
);
};
}
我的目的是提供文章列表(词典列表),以便以后可以轻松访问它们。 我对此停留了一段时间,我的代码给我一个关于为NSArray调用不存在的方法的错误,这使我怀疑我误解了json对象。 我对此完全陌生,我们将不胜感激。
这是我的代码:
NSDictionary *results = [jsonString JSONValue];
NSDictionary *Articles = [[results objectForKey:@"Sections"] objectForKey:@"Section"];
NSArray *ListOfArticles = [Articles objectForKey:@"Article"];
for (NSDictionary *article in ListOfArticles)
{
NSString *title = [article objectForKey:@"Title"];
NSLog(title);
}
谢谢 !
首先,这些不是有效的JSON数据。 名称(在名称/值对中)是字符串,必须用引号引起来。 字符串值必须始终用引号引起来。 布尔值必须为true
或false
(小写)。 检查http://json.org/和http://www.ietf.org/rfc/rfc4627.txt?number=4627和http://jsonlint.com
这是数据的结构:
Sections
的名称(键),其值本身就是另一个对象(字典) Sections
有一个名为Section
的名称(键),其值是一个数组 Section
数组中的每个元素都是一个对象(字典) Section
数组中的每个元素都有一个名为Article
的名称(键),其值是一个数组,以及其他名称(键): ID
, title
, totalNews
Article
数组中的每个元素都是一个对象 如果您的JSON数据有效,则可以按以下方式对其进行解析:
// 1.
NSDictionary *results = [jsonString JSONValue];
// 2.
NSDictionary *sections = [results objectForKey:@"Sections"];
// 3.
NSArray *sectionsArray = [sections objectForKey:@"Section"];
// 4.
for (NSDictionary *section in sectionsArray) {
// 5.
NSLog(@"Section ID = %@", [section objectForKey:@"ID"];
NSLog(@"Section Title = %@", [section objectForKey:@"Title"];
NSArray *articles = [section objectForKey:@"Article"];
// 6.
for (NSDictionary *article in articles) {
NSLog(@"Article ID = %@", [article objectForKey:@"ID"];
NSLog(@"Article Title = %@", [article objectForKey:@"Title"];
// …
}
}
您的JSON框架可能正在解析您期望使用NSArray的NSDictionary。 它可以让您将NSDictionary分配给NSArray,但是当您尝试在“数组”上调用方法时,您将获得运行时异常。 从您发布的JSON(这是不正确的JSON)来看,这就是我的解析代码的样子。 NSDictionaries和NSArrays的名称仅以它们表示的JSON属性命名。
NSDictionary* results = [jsonString JSONValue];
NSDictionary* sections = [results valueForKey:@"Sections"];
NSArray* section = [sections valueForKey:@"Section"];
NSArray article = [[section objectAtIndex:0] valueForKey:@"Article"];
for (NSDictionary* anArticle in article) {
NSLog(@"%@", [anArticle valueForKey:@"Title"]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.