我聘请了一位iOS开发人员来创建一个将由REST API支持的应用程序。现在我遇到了一个输出问题。
有公共和私人组,如果组是私有的,API将以json格式返回:
privacy":{"value":"1"},
如果该组是Public,则API将以json格式返回以下内容:
"privacy":[]
iOS开发人员表示此输出不正确,而另一方面API开发人员认为这是正确的输出。任何人都可以告诉我这个输出是否正确用于iOS应用程序或它不正确?
iOS开发人员日,他无法比较字符串和数组。
答案 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)
)