Source是CouchDB中的JSON(相关数据):
{
"_id":"f994892f3fb525d73b3b6b8a59000e1d",
"_rev":"3-c431ee9334e9be038d9c935efcf2f049",
"teiXML":[
{
"teiHeader":[
{
"fileDesc":[
{
"publicationStmt":[
{
"publisher":"University",
"pubPlace":"Someplace",
"idno type=\"callNo\"":"ABC 007",
"date":"2007"
}
],
这是NSDictionary(简化):
<CCouchDBDocument: 0x5842c0> (id:f994892f3fb525d73b3b6b8a59000e1d rev:4-3fc1a36de622529cd67416c9e5ae88da {
"_id" = f994892f3fb525d73b3b6b8a59000e1d;
"_rev" = "4-3fc1a36de622529cd67416c9e5ae88da";
teiXML = (
{
teiHeader = (
{
fileDesc = (
{
publicationStmt = (
{
date = 2007;
"idno type=\"callNo\"" = "ABC 007";
publisher = "University";
我想获得“publisher”的价值,所以我尝试使用valueForKeyPath:
NSLog(@"%@",[doc valueForKeyPath:@"content.teiXML.teiHeader.fileDesc.publicationStmt.publisher"]);
但是我没有使用“大学”这个值作为输出:
1> 2011-05-26 10:10:02.717 MyApp[12770:707] (
(
(
(
"University"
)
)
)
)
这很烦人。我可以使用indexAtObject-combination获取值:
NSLog(@"%@",[[[[[doc valueForKeyPath:@"content.teiXML.teiHeader.fileDesc.publicationStmt.publisher"] objectAtIndex:0] objectAtIndex:0] objectAtIndex:0] objectAtIndex:0]);
那里肯定有问题吗?有更多值要提取,我不想计算我需要多少个objectAtIndex重复才能使它工作。
答案 0 :(得分:4)
您提到的是“xml”标记,因此我认为您的NSDictionary
是根据某些XML数据构建的。在这种情况下,可以解释此行为的一个假设是您的XML包含重复的键,如:
<values>
<value>
......
</value>
<value>
......
</value>
...
</values>
实际上,示例中的重复值不适合通过键值编码处理,并在内部处理为NSArray
s。现在,你在答复中获得如此多嵌套数组的实际细节很难让我弄清楚,但这可以给你一个暗示正在发生的事情。
如果此假设不适用于您的情况,请分享您构建NSDictionary的方式。
编辑:看了你的JSON后,有些事情对我来说并不明显。看看这个:"publicationStmt":[
{
"publisher":"University",
"pubPlace":"Someplace",
"idno type=\"callNo\"":"ABC 007",
"date":"2007"
}
],
我的理解是你有嵌套数组:plublicationStmt包含一个数组([),它包含另一个(键控)数组({)...
这可能会产生你的结果吗?