簡體   English   中英

使用 JSONKit 解析 JSON 文件

[英]Parsing JSON file using JSONKit

我正在構建一個音叉應用程序。 前叉最多允許 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將其解析為結構?

這是基於您的想法的有效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變量。

在您的問題中使用解析器並假設您在 NSString 變量中有 Simeon 的字符串。 以下是解析它的方法:

#import "JSONKit.h"


id parsedJSON = [myJSONString objectFromJSONString];

這將為您提供 arrays 和字典的層次結構,您可以通過這些字典來獲取PresetTheme對象。 在上面的例子中,你會得到一個包含兩個字典的數組,每個字典都有一個namecommentpresets鍵。 前兩個將有NSString值,第三個( presets )將有一個字典作為它的值,其中音符名稱作為鍵,頻率作為值(作為NSString對象)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM