gpt4 book ai didi

objective-c - 带有 valueForKeyPath 的嵌套 NSDictionary 返回括号而不是 NSString

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:22 24 4
gpt4 key购买 nike

源是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 组合获取值:

NSLog(@"%@",[[[[[doc valueForKeyPath:@"content.teiXML.teiHeader.fileDesc.publicationStmt.publisher"] objectAtIndex:0] objectAtIndex:0] objectAtIndex:0] objectAtIndex:0]);

一定是哪里出了问题?有更多的值要提取,我不想计算要使其工作需要多少次 objectAtIndex 重复。

最佳答案

你提到了“xml”标签,所以我想你的 NSDictionary 是从一些 XML 数据构建的。在这种情况下,可以解释此行为的一个假设是您的 XML 包含重复键,例如:

<values>
<value>
......
</value>
<value>
......
</value>
...
</values>

事实上,像示例中这样的重复值不适合通过键值编码处理,而是在内部作为 NSArray 处理。现在,我很难弄清楚为什么您的回复中有这么多嵌套数组的实际细节,但这可以给您一些提示,让您了解正在发生的事情。

如果这个假设不适用于您的情况,请分享您构建 NSDictionary 的方式。

编辑:在查看您的 JSON 后,有些东西对我来说并不明显。看看这个:

"publicationStmt":[
{
"publisher":"University",
"pubPlace":"Someplace",
"idno type=\"callNo\"":"ABC 007",
"date":"2007"
}
],

据我了解,您有嵌套数组:plublicationStmt 包含一个数组 ([),该数组又包含另一个(键控)数组 ({)...

这可能会产生您的结果吗?

关于objective-c - 带有 valueForKeyPath 的嵌套 NSDictionary 返回括号而不是 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135561/

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