iOS JSON解析,格式问题

时间:2015-08-10 03:11:32

标签: ios objective-c json nsarray nsdictionary

所以我正在开发一个项目,要求我使用一些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的指导,或者只是一般。

2 个答案:

答案 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