为啥有些字典键在从调试器打印时有引号而另一些没有?

Posted

技术标签:

【中文标题】为啥有些字典键在从调试器打印时有引号而另一些没有?【英文标题】:Why do some dictionary keys have quotes and others don't when printing from debugger?为什么有些字典键在从调试器打印时有引号而另一些没有? 【发布时间】:2013-01-06 21:53:32 【问题描述】:

所以我目前正在从我的服务器发回一个 JSON 对象。如果我在 XCode 中打印 responseObject,我会得到以下信息:

Printing description of responseObject:

order = 3;
"picture_bucket_name" = test;
"picture_creation_date" = "2013-01-06T21:49:54.546Z";
"picture_identifier" = 61;
"picture_url_with_bucket" = "test/pictures/sop/steps/test_default_320_320.png";
"sub_order" = 0;
 

为什么 Order 键不在“ ”中?这是我必须使用 NumberFormatter 从 NSString 转换为 NSNumber 的唯一键。这是为什么呢?

【问题讨论】:

我想这只是 Xcode 中的一个特性。这是您的示例中唯一没有下划线的键。也许他们为了可读性而忽略了它。惯用的 JSON 应该引用每个键。 【参考方案1】:

通常在控制台中为字典键显示没有任何空格和其他特殊字符的单个单词而没有任何引号。例如:- 上面示例中的键 order 和值 test。这有助于保持可读性。将这些其他词用引号括起来可确保可读性。

【讨论】:

我明白了。现在,为什么我必须这样做 newStep.order = [f numberFromString:[responseObject valueForKey:@"order"]];对于我的订单,我可以简单地执行 newStep.subOrder = [responseObject valueForKey:@"sub_order"]; ,即使它们在我的“newStep”对象中都必须是 NSNumber? 在objective c中order代表一个变量名,"order"代表一个字符串字面量。当您在代码中使用时,两者都不相同。以上仅适用于在控制台中显示。我不确定你在这里提到的newStep.order 是什么。第一个应该是 NSNumber 对象,第二个应该是字符串左右。 抱歉缺乏连贯性。如果您查看粘贴的输出,我正在尝试使用 [responseObject valueForKey:@"order"] 作为 NSNumber,但 Xcode 告诉我它是一个字符串,我需要使用格式化程序对其进行转换。但是,如您所见,没有“”。为什么它告诉我它是一个字符串?! @abisson,这很奇怪。您是否使用 NSLOG 语句打印上述内容?检查一下。如果它只是3 而不是"3",它应该是一个NSNumber。这就是我所看到的。

以上是关于为啥有些字典键在从调试器打印时有引号而另一些没有?的主要内容,如果未能解决你的问题,请参考以下文章

为啥有些参数是使用预定义的路由添加的,而另一些则放在查询字符串中?

NSDictionary 的描述 - 为啥有些键名带有引号?

为啥引用了一些对象文字属性而其他没有? [复制]

为啥vs2005调试时有时候可以进入断点,有时候进入不了断点

为啥打印机可以打印却不能复印?

python打印日志(logging)字典是单引号,转json时不识别单引号,怎么能打印出来时双引号