我正在构建一个音叉应用程序。叉子应允许最多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将其解析为结构?
答案 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];
这将为您提供数组和词典的层次结构,您可以通过这些层次结构来获取Preset
和Theme
个对象。在上面的例子中,您将获得一个包含两个词典的数组,每个词典都带有name
,comment
和presets
键。前两个将具有NSString
值,第三个(presets
)将具有字典作为其值,其中音符名称为键,频率为值(作为NSString
个对象)。 / p>