比较iOS

时间:2016-04-18 12:56:49

标签: ios json

我聘请了一位iOS开发人员来创建一个将由REST API支持的应用程序。现在我遇到了一个输出问题。

有公共和私人组,如果组是私有的,API将以json格式返回:

privacy":{"value":"1"}, 

如果该组是Public,则API将以json格式返回以下内容:

"privacy":[]

iOS开发人员表示此输出不正确,而另一方面API开发人员认为这是正确的输出。任何人都可以告诉我这个输出是否正确用于iOS应用程序或它不正确?

iOS开发人员日,他无法比较字符串和数组。

3 个答案:

答案 0 :(得分:3)

是的,它是正确的,因为JSON没有不正确的东西,因为没有符合的架构。只要它是合法的,那就没关系。

iOS开发人员可以在反序列化之后测试"privacy"值的类型:

id value = jsonDict[@"privacy"];
if ([value isKindOfClass:[NSDictionary class]]) {
    // Value is dictionary
    NSDictionary *dictValue = (NSDictionary *)value;
    NSString *number = dictValue[@"value"];   // This should be a number, not a string!
} else if ([value isKindOfClass:[NSArray class]]) {
    // Value is array

} else {
    // Value is illegal. Report error.
}

我会说它应该是:

{"value":1}

因为1是一个数字,而不是一个字符串。

答案 1 :(得分:2)

是的,iOS开发人员可以检查响应 但是JSON响应应该保持一致 一个API在数组中给出响应而在字典中给出响应是不正确的 对于iOS开发人员来说,它应该是数组或字符串。

  

输出应为:

{  
    "privacy":[{"value":1}]  
}

要验证JSON响应,您可以使用http://jsonlint.com/

答案 2 :(得分:0)

API设计不正确,因为它为privacy键提供了各种数据类型(并且没有架构定义了它应该如何表现)。一旦它成为字典,一旦它成为一个空数组。 我建议在任何情况下使用数组。

个人: 隐私:[{"价值" :true}]

公开: 隐私:[]

但是,可以将数组连接到字符串然后与字符串进行比较(使用let stringRepresentation = ",".join(array)