如何在Objective-C中处理用于JSON格式的嵌入式数组

马克思主义

我有一本字典array

     {
        "encoding": "320", 
        "format": "MP3", 
        "media": "CD", 
        "name": "foo", 
        "remaster_title": ""
    }, 
    {
        "encoding": "V0 (VBR)", 
        "format": "MP3", 
        "media": "CD", 
        "name": "bar", 
        "remaster_title": ""
    }, 
    {
        "encoding": "Lossless", 
        "format": "FLAC", 
        "media": "CD", 
        "name": "bar", 
        "remaster_title": "hoho"
    }

我想将它们分开,以便它们唯一。例如,应该只有一个,name所以会有两个部分:foobar

然后在每个namefoobar)中应该有remaster_title(for foo以及barboth:hoho)...。

顺序应为:name > remaster_title > media > format > encoding

我认为如果我可以使用类似以下格式的文件,则可以使用:

music[name][remaster_title][media][format] = encoding

这样所有的键都可以合并吗?

我努力了:

+(NSMutableDictionary*)handleReturnedArtistJson:(NSDictionary*)json{
    NSMutableDictionary *music = [[NSMutableDictionary alloc] init];
    for(NSDictionary *result in json[@"response"][@"group"]) {
        NSString* release_type = result[@"releaseType"];
        NSString* name = result[@"groupName"];

        if (![release_type  isEqual: @"Compilation"]){
            for (NSDictionary *subgroup in result[@"subgroup"]){
                NSString* media = subgroup[@"media"];
                NSString* remaster_title = subgroup[@"remasterTitle"];
                NSString* format = subgroup[@"format"];
                NSString* encoding = subgroup[@"encoding"];

                music[name][remaster_title][media][format] = encoding;
            }
        }
    }
    return music;
}

NSLog(@"%@",music);什么也没返回。

亚历克斯·诺拉斯科

评论区域太小,无法提出一些问题,但让我们假设一些事情。您想将JSON解析为对象树。让我们看看这段代码是否可以帮助您。

#import <Foundation/Foundation.h>

typedef NSMutableDictionary<NSString*, NSString*> formatDictionary;
typedef NSMutableDictionary<NSString*, formatDictionary*> mediaDictionary;
typedef NSMutableDictionary<NSString*, mediaDictionary*> titleDictionary;
typedef NSMutableDictionary<NSString*, titleDictionary*> nameDictionary;

@interface DataSource : NSObject
- (nameDictionary*)parseJSONFile:(NSString *)jsonFile error:(NSError *__autoreleasing *)outError;
@end

实作

@implementation DataSource

- (NSString *)valueOrDefaultFromDictionary:(NSDictionary *) dictionary forKey: (NSString *) key
{
    NSString * value = dictionary[key];
    if (![value length]) {
        return @"";
    }
    return value;
}

- (NSArray *)jsonToArray:(NSString *)jsonFile error:(NSError *__autoreleasing *)outError
{
    NSString *path  = [[NSBundle mainBundle] pathForResource:jsonFile ofType:@"json"];
    NSString *jsonString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSError *jsonError;
    NSArray *jsonDataArray = [NSArray new];
    jsonDataArray = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&jsonError];

    if (jsonDataArray == nil) {
        if (outError) {
            *outError = [NSError errorWithDomain:@"yourdomain" code:-42 userInfo:@{NSUnderlyingErrorKey: jsonError}];
        }
        return nil;
    }
    return jsonDataArray;
}


- (nameDictionary*)parseJSONFile:(NSString *)jsonFile error:(NSError *__autoreleasing *)outError
{
    NSArray * jsonDataArray = [self jsonToArray:jsonFile error:outError];
    if (!jsonDataArray) {
      return nil;
    }
    nameDictionary* music = [nameDictionary new];

    [jsonDataArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSString * name = [self valueOrDefaultFromDictionary:obj forKey:@"name"];
        NSString * title = [self valueOrDefaultFromDictionary:obj forKey:@"remaster_title"];
        NSString * media = [self valueOrDefaultFromDictionary:obj forKey:@"media"];
        NSString * format = [self valueOrDefaultFromDictionary:obj forKey:@"format"];
        NSString * encoding = [self valueOrDefaultFromDictionary:obj forKey:@"encoding"];
        music[name] = [@{title: [@{media: [@{format:encoding} mutableCopy] } mutableCopy] } mutableCopy];
    }];
    return music;
}
@end

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用$ .each在JSON中显示嵌入式数组?

如何在C ++中嵌入Chromium嵌入式框架

如何从嵌入式资源C#中读取.JSON

如何在MongoDB中的嵌入式数组对象中插入json对象?

如何在嵌入式数组mongodb中查询嵌入式文档

如何将嵌入式 C 中的类型用于便携式裸机软件

嵌入式 C 中如何处理运行时错误?

如何在Spring Boot中为嵌入式Jetty设置处理程序?

如何在Objective C中存储块?

如何在MongoDB中查询数组中的单个嵌入式文档?

如何访问Pandas DataFrame中的嵌入式json对象?

如何在Objective c 中处理TableviewCell 中的UIButton?

如何在Objective-C中的数组内部声明数组?

如何在MongoDB的数组字段中查询和删除嵌入式对象?

如何在数组中的嵌入式文档中指定/投影字段?

与数组比较,如何在mongodb中检索部分嵌入式文档?

如何在Objective-C中执行补全处理程序

如何在 Objective C 中使用 CallKit

如何查询Mongodb的嵌入式数组

如何在Swift中创建嵌入式JSON对象并返回String?

如何在Objective C中解析Wikipedia的JSON数据?

如何在Objective C中从JSON获取HTML图像?

如何在Objective-C iOS中解析JSON

如何在嵌入式ANSI C中制作锁定/关键部分?

如何在MVC(C#)中刷新嵌入式PowerBI

如何在嵌入式Python中动态添加C函数

如何在linq查询C#中避免两个嵌入式循环

如何在嵌入式C的文本文件中写数字

如何在C#Windows Forms应用程序中运行嵌入式.exe文件?