来源是JSON CouchDB中(相关数据):嵌套的NSDictionary与valueForKeyPath返回支架代替的NSString
{
"_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";
我想获得“出版商”的价值,所以我尝试使用valueForKeyPath:
NSLog(@"%@",[doc valueForKeyPath:@"content.teiXML.teiHeader.fileDesc.publicationStmt.publisher"]);
但代替值“Un大学“我得到这个作为输出:
1> 2011-05-26 10:10:02.717 MyApp[12770:707] (
(
(
(
"University"
)
)
)
)
这是相当恼人的。我可以用indexAtObject组合得到值:
NSLog(@"%@",[[[[[doc valueForKeyPath:@"content.teiXML.teiHeader.fileDesc.publicationStmt.publisher"] objectAtIndex:0] objectAtIndex:0] objectAtIndex:0] objectAtIndex:0]);
有什么东西一定是错的吗?还有更多值需要提取,我不想计算需要多少个objectAtIndex重复才能使其工作。
对不起,我将XML转换为Jouch for CouchDB,所以NSDictionary是从JSON源构建的,而不是XML。我将把JSON源添加到问题中。 – Patrick 2011-05-26 08:57:18
正如所料,输出是一个NSArray: '(GDB)PO项 <__ NSArrayI 0x53fcf0>( <__ NSArrayI 0x54d4c0>( <__ NSArrayI 0x55dc10>( <__ NSArrayI 0x554280>( 大学 ) ) ) )'。我真的很好奇为什么? – Patrick 2011-05-26 09:56:58
帕特里克,请参阅我的编辑... – sergio 2011-05-26 10:05:34