【问题标题】:Compare String and Array in iOS比较 iOS 中的字符串和数组
【发布时间】:2016-04-18 21:14:36
【问题描述】:

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

有Public 和Private Groups,如果group 是Private,API 会以json 格式返回:

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

如果群组为 Public,API 将以 json 格式返回以下内容:

"privacy":[]

iOS 开发人员说这个输出不正确,而另一方面 API 开发人员认为这是正确的输出。谁能告诉我这个输出在 iOS 应用中使用是正确的还是不正确的?

iOS 开发者时代他无法比较 String 和 Array。

【问题讨论】:

  • 是的,它是正确的,iOS 开发人员可以检查响应对象类并进行相应的解析。不是什么大问题。这也可以由 webdeveloper 通过使用相同的响应格式来解决,我的意思是两种情况下的数组
  • “正确”、“好主意”和“好设计”通常是 3 个非常不同的东西。这种情况可以在所有这三个定义下进行论证,并且都是适当的。这是一个“糟糕”的 API 响应,它并不明显或易于使用,但它是可用的......

标签: ios json


【解决方案1】:

是的,它是正确的,因为 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 是一个数字,而不是一个字符串。

【讨论】:

    【解决方案2】:

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

    输出应该是:

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

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

    【讨论】:

    • 我认为无论如何都可以合理地假设网络响应存在不一致,无论使用何种格式。想象一个系统范围的错误响应,它是一个带有"error" 键的字典。系统可以根据请求返回一大堆不同的响应,但是必须测试所有响应以查看它是否是错误响应。这是很常见的情况。
    • @trojanfoe 是的,你的担心也是有道理的。
    【解决方案3】:

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

    私人: 隐私 : [ {"value" : true} ]

    公开: 隐私:[]

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

    【讨论】:

    • 我会说这是一个设计糟糕的 API,但正如@trojanfoe 在他的回答中提到的那样,它并不正确。
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2020-08-07
    • 2021-12-06
    相关资源
    最近更新 更多