任何快捷方式或开源代码都可以在Objective-C中使用适当的缩进格式化JSON字符串

时间:2014-03-19 05:19:54

标签: objective-c json nsstring

问题:

每当我从Web Server获得JSON字符串时,它看起来像这样:

{"array":[1,2,3],"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"},"string":"Hello World"}

我真的想将字符串格式重新组织到NSLog(),就像这样:

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d",
    "e": "f"
  },
  "string": "Hello World"
}

问题:

是否有任何快捷方式可以使用适当的缩进和换行来格式化JSON NSString? (我知道[NSDictionary说明])

P.S。

有时候,JSON NSString有这样的前缀字符串:

  Web Service response is : {"array":[1,2,3],"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"},"string":"Hello World"}

任何方法或正则表达式都可以从段落中获取JSON字符串吗?

3 个答案:

答案 0 :(得分:3)

试试这个

 NSData *data = [NSJSONSerialization dataWithJSONObject:temp options:NSJSONWritingPrettyPrinted error:nil ];
 NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

 NSLog(@"result: %@", aStr);

答案 1 :(得分:1)

首先尝试将其解析为Object,然后看看如果打印它会发生什么。幸运的是,Array和Dictionaries的文本表示将帮助您顺利进行。现在你正在打印一个字符串,它看起来总是那样。

显然,您可以编写一些识别大括号和逗号的代码,并在此基础上添加行尾和缩进。不应该太难,但问题是你为什么要这么做?

如果您使用它进行调试,只需在那里放置一个断点,然后使用检查器在XCode中查看代码中的对象。这将显示对象和对象,并为您提供将其表示打印到控制台的选项。

答案 2 :(得分:1)

这里有一些代码可以将前导字符剥离到第一个大括号,并在调试控制台上显示格式良好的JSON数据。

NSRange range = [str rangeOfString:@"{"];
if ( range.location != NSNotFound )
    str = [str substringFromIndex:range.location];

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
id jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

NSLog( @"%@", jsonData );