使用JSONKitparsingJSON文件

我正在构build一个音叉应用程序。 叉子应该允许12个预先设定的音高。

而且,我希望允许用户select一个主题。 每个主题将加载一组预设(不必使用它们全部)。

我的configuration文件看起来像这样*:


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编写我的文件? (我想创build一个最低限度的用户input – 我可以得到多么简洁?有人可以给我一个第一个主题的例子吗?)

我该如何使用https://github.com/johnezang/JSONKit将其parsing到结构中?

以下是基于您的想法的有效 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" } } ] 

阅读文件并使用JSONKitparsing:

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

之后,你将不得不使用for循环迭代jsonvariables。

在你的问题中使用parsing器,并假定你有一个NSStringvariables中的Simeonstring。 以下是parsing它的方法:

 #import "JSONKit.h" id parsedJSON = [myJSONString objectFromJSONString]; 

这将给你一个数组和字典的层次结构,你可以走,让你的PresetTheme对象。 在上面的例子中,你会得到一个包含两个字典的数组,每个字典都有一个namecommentpresets键。 前两个将有NSString值,第三个( presets )将有一个字典,因为它的值是音符名称作为键,频率作为值(作为NSString对象)。