我们如何在 iPhone 中处理动态 Web 服务?

Posted

技术标签:

【中文标题】我们如何在 iPhone 中处理动态 Web 服务?【英文标题】:How we can handle dynamic web service in iPhone? 【发布时间】:2012-03-06 10:48:53 【问题描述】:

我在 iPhone 中学习一些棘手的开发,在我的实验中我发现通常我们使用本地化的 Web 服务,其中所有参数都是固定的(关键字)。如果我的网络服务将更改响应中的某些字段,而不是我们如何在 iPhone 中处理。请帮我。如果有人有什么好主意。

例如, Web服务响应1:

    [    
      "Number":"A12 hrb",
      "List":[
         
            "Type":"Works",
            "Display":
               "dop":45,
               "dopper":56
            ,
            "OAST":"10-01-2012",
            "OAET":"07-04-2012",
            "Cause":"define",
            "Impact":"Queue",
            "Description":"Take a Break.",
            "LName":"Lunetten To Lunetten",
            "Number":"A12 hrb",
         
      ]    ,   ]

Web 服务响应 2:

[    
      "Number":"A12 hrb",
      "Number2":"A13 brs",
      "List":[
         
            "Type":"Works",
            "Display":
               "dop":45,
               "dopper":56
               "picker":90  
            ,
            "OAST":"10-01-2012",
            "MAET":"07-04-2012", 
            "OAET":"07-04-2012",
            "Cause":"define",
            "Impact":"Queue",
            "Description":"Take a Break.",
            "LName":"Lunetten To Lunetten",
            "Number":"A12 hrb",
         
      ]    ,   ]

【问题讨论】:

如果问题是如何解析 JSON,看看 JSONKit。 您可以控制网络服务吗?还是第三方网络服务? 它是第三方网络服务。但是谁的网络服务无关紧要。问题是网络服务响应不断变化.. 【参考方案1】:

你可以这样做

    解析响应。如果响应是 JSON,那么您肯定会得到一个字典,只需保留它的引用即可。 您可以通过调用以下方法获取字典中的所有键 (NSArray *)allKeys 现在枚举上面的数组并访问每个键的值并做任何你想做的事情

但是您应该知道动态键的含义/用途。如果您没有键的含义/用途,这些步骤可能对您没有帮助……祝您好运。

【讨论】:

感谢回复,使用 [(NSArray *)allKeys] 方法我们只能得到主键。就像,如果我将这种方法用于上面提到的 Web 服务,那么我们只能得到“数字”、“列表”。对于内部键,我们必须制作另一个字典并再次执行所有这些过程。事件我们不知道是否有任何子字典。嵌套 json Web 服务可能会变得复杂。这不是正确的解决方案。我之前尝试过。 是的,你是对的,这是不正确的,但你可以编写一个递归方法来完成所有这些事情。我认为没有任何现成的 api,您需要手动处理所有这些。我只能建议编写一种可以处理所有可能性字典数组的方法.....祝你好运。【参考方案2】:

对于这种情况,您可以获取字典并在字典中您 可以得到你想要的标签的值意味着你只需要根节点 并将根节点的所有数据存储在字典中并处理 字典供进一步使用..

【讨论】:

【参考方案3】:

我认为不可能完全解析它。至少你应该知道哪些键将在那里。例如响应具有 Number、Number2 和 List 作为键。如果某些响应不包含一个/某些键,则可以。

另一方面,如果事先知道所有的密钥是不可能的,那么 web 服务应该有机制来传递响应中使用的密钥。

例如

[ "dynamic_keys": "Number2", "数字":"A12 hrb", "Number2":"A13 brs", “列表”:[ “类型”:“作品”, “展示”: “dop”:45, “掺杂”:56 “选择器”:90 , “敬酒”:“2012 年 10 月 1 日”, "MAET":"07-04-2012", "OAET":"07-04-2012", “原因”:“定义”, “影响”:“队列”, "描述":"休息一下。", "LName":"Lunetten To Lunetten", "数字":"A12 hrb", ] , ]

您可以读取“dynamic_keys”的值,然后使用该值可以读取实际动态键的值。

edit:正如 ssteinberg 所提到的,您可以使用 JSONKit 之类的框架来解析实际的 JSON。 另请参阅:How to parse JSON having dynamic key node

【讨论】:

以上是关于我们如何在 iPhone 中处理动态 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 中使用 PhoneGap 调用基于 SOAP 的 Web 服务?

如何在动态 UITableView (iPhone) 中处理对 UITextFields 的引用

mini-web

搜索海量数据来自 iPhone 中的 Web Services

iPhone App 中的 UIAlertView 动态

iPhone 多任务处理和网络服务调用