如何将 json 转换为 NSArray

How to convert json to NSArray

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

或将此 json 转换为:

谁能告诉我步骤是什么?谢谢!

试试这个。

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"]
    }
}

为Swift3.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: "[=13=]", 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 }