如何将json转换为NSArray [英] How to convert json to NSArray
本文介绍了如何将json转换为NSArray的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在页面上输出了一个JSON数组.我想将此JSON数组转换为NSArray.
I have a JSON array being output on a page. I would like to convert this JSON array into an NSArray.
或将此json转换为:
Or convert this json like :
有人可以让我知道该怎么做吗?谢谢!
Can someone let me know what the step might be? Thank you!
推荐答案
尝试一下.
NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
或
NSArray * json = [self JSONWithData:data];
+(id)JSONWithData:(NSData *)data
{
if (!data)
{
return nil;
}
id json = [NSJSONSerialization JSONObjectWithData:data
options:0
error:nil];
if (!json)
{
// try to clean response
NSString * dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (!dataString)
{
dataString = [[NSString alloc] initWithData:data encoding:NSWindowsCP1251StringEncoding];
}
NSRange rangeDict = [dataString rangeOfString:@"{"];
NSRange rangeArray = [dataString rangeOfString:@"["];
NSRange range = rangeDict;
if ((rangeDict.location == NSNotFound) || (rangeArray.location != NSNotFound && rangeArray.location < rangeDict.location))
{
range = rangeArray;
}
if (range.location != NSNotFound)
{
dataString = [dataString substringFromIndex:range.location];
NSError * error = nil;
if ([dataString length])
{
json = [NSJSONSerialization JSONObjectWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&error];
if (!json)
{
dataString = [dataString stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
error = nil;
json = [NSJSONSerialization JSONObjectWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&error];
}
if (!json)
{
dataString = [dataString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
error = nil;
json = [NSJSONSerialization JSONObjectWithData:[dataString dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&error];
}
}
if (json)
{
NSLog(@"Response cleaned");
}
else
{
NSLog(@"Failed to parse JSON: %@", [error localizedDescription]);
}
}
}
return json;
}
并像这样使用它:
if (json) {
if ([json count] > 0) {
NSString * name = json[0]["name"]
if (name) {
}
NSArray *arrayContent = json[0]["array_content"]
}
}
对于Swift 3.0
For Swift 3.0
extension JSONSerialization {
final class func jsonObject(with data: Data, checkEscapeSymbols: Bool = false) -> Any? {
do {
var data = data
if !data.isEmpty, let txt = String(data: data, encoding: .utf8) {
var newTxt = txt.replacingOccurrences(of: "\\", with: "\\\\")
newTxt = newTxt.replacingOccurrences(of: "\\\\/", with: "\\/")
newTxt = newTxt.replacingOccurrences(of: "\\\\\"", with: "\"")
newTxt = newTxt.replacingOccurrences(of: "\\\"", with: "\"")
newTxt = newTxt.replacingOccurrences(of: "\\\\'", with: "\\'")
if checkEscapeSymbols {
newTxt = newTxt.replacingOccurrences(of: "\0", with: "\\0")
newTxt = newTxt.replacingOccurrences(of: "\r", with: "\\r")
newTxt = newTxt.replacingOccurrences(of: "\n", with: "\\n")
newTxt = newTxt.replacingOccurrences(of: "\t", with: "\\t")
}
if let data_ = newTxt.data(using: .utf8) { data = data_ }
}
return try jsonObject(with: data, options: [])
} catch { return nil }
}
}
guard let json = JSONSerialization.jsonObject(with: data) as? AnyObject else { return }
这篇关于如何将json转换为NSArray的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文