使用JSONKit解析JSON文件

时间:2011-07-12 11:40:05

标签: objective-c ios json file parsing

我正在构建一个音叉应用程序。叉子应允许最多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 个答案:

答案 0 :(得分:10)

以下是基于您的想法的valid 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];

之后,您将不得不使用for循环迭代json变量。

答案 1 :(得分:6)

在你的问题中使用解析器并假设你在NSString变量中有Simeon的字符串。以下是解析它的方法:

#import "JSONKit.h"


id parsedJSON = [myJSONString objectFromJSONString];

这将为您提供数组和词典的层次结构,您可以通过这些层次结构来获取PresetTheme个对象。在上面的例子中,您将获得一个包含两个词典的数组,每个词典都带有namecommentpresets键。前两个将具有NSString值,第三个(presets)将具有字典作为其值,其中音符名称为键,频率为值(作为NSString个对象)。 / p>