Xcode 如何 NSLog 一个 JSON

Posted

技术标签:

【中文标题】Xcode 如何 NSLog 一个 JSON【英文标题】:Xcode how to NSLog a JSON 【发布时间】:2011-08-17 18:47:23 【问题描述】:

有没有办法让 NSLog 打印出整个 JSON 文件。我现在说的是

NSString *deviceInfo = [NSString stringWithFormat:@"%@ %@",
                        [[UIDevice currentDevice]model], [[UIDevice currentDevice]systemVersion]];
NSDictionary *json = [deviceInfo JSONValue];
NSLog(@"json file = %@", json);

它正在打印出“json file = (null)”

谢谢 克林顿

【问题讨论】:

【参考方案1】:

我认为您误解了 JSON 的用途。您传递给 -JSONValue 的字符串不是有效的 JSON 字符串,因此它返回 nil。您不妨自己构建字典:

UIDevice *device = [UIDevice currentDevice];
NSDictionary *deviceInfo = [NSDictionary dictionaryWithObjectsAndKeys:[device model], @"deviceModel", [device systemVersion], @"deviceSystemVersion", nil];

那么,如果您想要对象的 JSON 字符串表示形式(例如,用于发送到您的服务器):

NSString *jsonDeviceInfo = [deviceInfo JSONRepresentation];

【讨论】:

谢谢你,它工作得很好。它目前正在打印出这个"deviceModel":"iPod touch","deviceSystemVersion":"4.3.5",如果我想拥有多个块以及每个块外部的东西,比如"hardware":"deviceModel":"iPod touch" "os":"deviceSystemVersion":"4.3.5",我该怎么做。 只嵌套字典。 [NSDictionary dictionaryWithObjectsAndKeys:someDictionary, @"someKey", someOtherDictionary, @"someOtherKey", nil] 是的。还有一件事。我似乎无法更改 NSDictionary 中的顺序。我有NSDictionary *fullJSON = [NSDictionary dictionaryWithObjectsAndKeys: hardware, @"hw", os, @"os", nil];,但它正在打印出"os":"ver":"4.3.5","hw":"model":"iPod touch" 我认为没有必要,但如果我能够让硬件先行就好了。 字典中键的顺序并没有真正定义。无论您在何处使用该数据,只需按照您需要的顺序提取值即可。【参考方案2】:

您确定您的代码可以正常工作吗?你的 NSDictionary 似乎是 nil ...

能否请您发布 JSONValue 的实现?

如果对象未按预期打印,您始终可以通过扩展覆盖 -(NSString *) description 方法,它将打印您指定的方式:)

【讨论】:

我试过NSLog(@"json file = %@", [json description]);,但我仍然收到(null)。 JSONValue 似乎也有错误。上面写着-JSONValue failed. Error trace is: ( "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognised leading character\" UserInfo=0x1cc3c0 NSLocalizedDescription=Unrecognised leading character"我不知道你说的JSONValue的实现是什么意思。 NSString 没有实现名为 JSONValue afaik 的方法,所以你一定是自己实现的?你在这个方法中使用了哪些代码? JSONValue 来自 JSON 库。看起来像这样- (id)JSONValue SBJsonParser *jsonParser = [SBJsonParser new]; id repr = [jsonParser objectWithString:self]; if (!repr) NSLog(@"-JSONValue failed. Error trace is: %@", [jsonParser errorTrace]); [jsonParser release]; return repr;

以上是关于Xcode 如何 NSLog 一个 JSON的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 json 中取出值并在 NSLog 中显示它们

没有 XCode 的应用程序的 NSLog 输出?

如何在发送之前对 JSON 进行 NSLog

如何以 JSON 格式 NSLog NSData JSON 响应?

iOS 10 / Xcode 8 设备上的 NSLog 似乎被截断了?为啥?

OCUnit、NSLog 和 XCode 3.1