Разбор файла JSON с использованием JSONKit - PullRequest
5 голосов
/ 12 июля 2011

Я создаю приложение камертона. Вилка должна допускать до 12 предустановленных шагов.

Более того, я хочу разрешить пользователю выбирать тему. Каждая тема будет загружать набор пресетов (не обязательно использовать все из них).

Мой файл конфигурации будет выглядеть примерно так *:


theme: "A3"
comment: "An octave below concert pitch (ie A4 440Hz)"
presets: {
    A3 220Hz=220.0
}

// http://en.wikipedia.org/wiki/Guitar_tuning
theme: "Guitar Standard Tuning"
comment:"EADGBE using 12-TET tuning"
presets: {
    E2=82.41
    A2=110.00
    D3=146.83
    G3=196.00
    B3=246.94
    E4=329.63
}

theme: "Bass Guitar Standard Tuning"
comment: "EADG using 12-TET tuning"
presets: {
    E1=41.204
    A2=55.000
    D3=73.416
    G3=97.999
}

... которые должны быть извлечены в некоторую структуру, подобную этой:


@class Preset
{
    NSString* label;
    double freq;
}

@class Theme
{
    NSString* label;
    NSMutableArray* presets;
}

NSMutableArray* themes;

Как мне написать свой файл, используя JSON? (Я хотел бы создать минимальный набор текста со стороны пользователя - насколько кратким я могу его получить? Может ли кто-нибудь привести пример для первой темы?)

А как мне разобрать его на структуры, используя https://github.com/johnezang/JSONKit?

Ответы [ 2 ]

10 голосов
/ 12 июля 2011

Вот пример действительный JSON, основанный на ваших мыслях:

[
    {
        "name": "Guitar Standard Tuning",
        "comment": "EADGBE using 12-TET tuning",
        "presets": {
            "E2": "82.41",
            "A2": "110.00",
            "D3": "146.83",
            "G3": "196.00",
            "B3": "246.94",
            "E4": "329.63"
        }
    },
    {
        "name": "Bass Guitar Standard Tuning",
        "comment": "EADG using 12-TET tuning",
        "presets": {
            "E1": "41.204",
            "A1": "55.000",
            "D2": "73.416",
            "G2": "97.999"
        }
    }
]

Чтение файла и анализ с использованием JSONKit:

NSData* jsonData = [NSData dataWithContentsOfFile: path];
JSONDecoder* decoder = [[JSONDecoder alloc]
                             initWithParseOptions:JKParseOptionNone];
NSArray* json = [decoder objectWithData:jsonData];

После этого вам придется перебирать переменную json с помощью цикла for.

6 голосов
/ 12 июля 2011

Используя парсер в вашем вопросе и предполагая, что у вас есть строка Симеона в переменной NSString.Вот как это проанализировать:

#import "JSONKit.h"


id parsedJSON = [myJSONString objectFromJSONString];

Это даст вам иерархию массивов и словарей, по которым вы можете ходить, чтобы получить объекты Preset и Theme.В приведенном выше случае вы получите массив с двумя словарями, каждый с ключом name, comment и presets.Первые два будут иметь значения NSString, а третье (presets) будет иметь словарь в качестве значения с именем примечания в качестве ключей и частотами в качестве значений (в качестве NSString объектов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...