如何将json转换为NSArray

法迪尔斯

我在页面上输出了一个JSON数组。我想将此JSON数组转换为NSArray。

在此处输入图片说明

或像这样转换此json: 在此处输入图片说明

有人可以让我知道这可能是什么步骤吗?谢谢!

Dmytro Shvetsov

试试这个。

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

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 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章