所以我正在开发一个项目,要求我使用一些JSON,我遇到了一些关于表示事物的最佳方式的问题。首先,这是JSON的外观:
"phoneList": [
{
"phoneReason": "End of Contract",
"phoneType": [
{
"id": 5,
"phoneType": "Android Smartphone"
}
]
}
]
我想知道最恰当的表达方式。
例如,我知道我的phoneReason只是一个简单的NSString,而我的phoneType实际上是一个NSArray。但是,我不知道如何表示a)id,我知道这是一个整数,但是这应该是一个NSInteger还是一个NSNumber而且b)有人可以指向一些示例代码的方向,我可以理解模拟包含整数和字符串的字典对象,以及我可以理解如何为字典数组建模的地方。
我的另一个问题也是类似的,因为我说我实际上发布了一些内容,我该如何对此进行建模,特别是对于包含数字/整数和字符串的字典类型(JSON Curly Brace)对象。
例如,这是我正在尝试建模的JSON,然后做这样的事情:
"phoneReason": "Upgrade",
"phoneInfo": {
"id": "2"
},
//然后我想传递ID
-(void) createOurRequest:(NSNumber *)id {
NSDictionary *myDictionary = @{
@"phoneReason" : [NSString stringWithFormat:@"%i", s elf.dat.reason],
//How do I then represent the phoneInfo element exactly?
};
对不起,对于这个笨拙的问题,非常感谢任何关于在iOS中建模JSON的指导,或者只是一般。
答案 0 :(得分:1)
我假设你在问问题a)和b),以及如何建模JSON。
a)Obj-C的不幸之处在于所有集合元素都必须是对象。整数是值类型,因此需要将它们转换为NSNumber
才能工作。但是,如果您正在解析JSON字符串,则内置JSON解析器会为您执行此操作。我将在下面描述它。
b)该模型基于JSON。 您描述对象集合,解析器将为您确定模型。在您的示例中,您将拥有NSDictionary<NSString *: NSArray<NSDictionary<NSString *: id>*>*>
。最里面的元素的值为id
,因为您可以拥有NSString
("End of Contract"
)或NSArray
("phoneType": [ { "id": 5, "phoneType": "Android Smartphone" } ]
)
当然,模型是由您的JSON定义的,因此如果您通过解析器运行它,您将获得一个结构化对象。您可以根据模型(object[@"phoneList"][@"phoneReason"]
)访问每个元素。
要使用的类方法是:
+ (id)JSONObjectWithData:(NSData *)data
options:(NSJSONReadingOptions)opt
error:(NSError **)error
在其中传递字符串的NSData
表示,选项(或0
)和NSError指针(error*
)。您可以使用您定义的适当结构获得已解析的JSON。
NSDictionary *parsedJSONObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:NULL
我没有选择使用,我知道不会有任何错误,因此我没有为这些参数传递任何内容。生成的对象将采用JSON所属的任何结构。
答案 1 :(得分:0)
使用您在第一个示例中提供的对象和json布局,这就是我如何创建字典和数组以获得您指定格式的json。希望这有助于使您更清楚。
CI
Open
Action Item