使用 JSONKit 解析 JSON 文件
Posted
技术标签:
【中文标题】使用 JSONKit 解析 JSON 文件【英文标题】:Parsing JSON file using JSONKit 【发布时间】:2011-07-12 11:40:05 【问题描述】:我正在构建一个音叉应用程序。前叉最多允许 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 示例格式错误 仔细阅读问题(倒数第二段)。我从来没有写过 JSON,直到一个小时前我才知道它。 抱歉,我以为您在寻找 Objective-C 代码(将解析的对象导入到您的 Objective-C 结构中) 是的,这就是我要找的。但是没有使用过JSON,我不知道如何编写初始文件。所以这是一个双重问题......如何编写文件,然后如何将其复制到 ObjC 结构中。 使用 jsonlint.com 验证您的 json。 【参考方案1】:这是一个基于您的想法的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
变量。
【讨论】:
谢谢!这真的很有帮助!是否不可避免地要到处使用数以千计的“标记”? 答案有错误:应该是NSArray而不是NSMutableDictionary。它是一个字典对象数组。 @P i:谢谢,我实际上不确定但从未检查过【参考方案2】:在您的问题中使用解析器并假设您在 NSString 变量中有 Simeon 的字符串。解析方法如下:
#import "JSONKit.h"
id parsedJSON = [myJSONString objectFromJSONString];
这将为您提供数组和字典的层次结构,您可以通过这些层次结构获取 Preset
和 Theme
对象。在上面的例子中,你会得到一个包含两个字典的数组,每个字典都有一个name
、comment
和presets
键。前两个将有 NSString
值,第三个 (presets
) 将有一个字典作为它的值,音符名称作为键,频率作为值(如 NSString
对象)。
【讨论】:
以上是关于使用 JSONKit 解析 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 JSONKit 在 iOS 中解析 JSON 数组 - 没有 ObjectForKey 标记的数组?