将格式错误的JSON解析为Xcode 6中的Swift对象

时间:2014-11-25 05:03:44

标签: json swift xcode6

我正在使用Swift和第三方Web服务中的一些JSON。我已经设法恢复JSON,但它的格式不是我习惯的方式。这是一个示例:

{
  "Type": "Success",
  "Results": [
    {
      "Key": "UserID",
      "Value": "40372"
    },
    {
      "Key": "Name",
      "Value": "Jeff"
    },
    {
      "Key": "Age",
      "Value": "35"
    },
    {
      "Key": "IsTempPassword",
      "Value": "False"
    },
    {
      "Key": "IsUserProfileComplete",
      "Value": "True"
    }
  ]
}

我想将这些数据解析为一个名为“User”的自定义swift对象,我遇到的问题是“key”的值实际上是关键本身。有没有一种有效的方法我可以遍历这个JSON,寻找“Key”获取它的价值,然后查找相应的“Value”并将它们配对?

2 个答案:

答案 0 :(得分:0)

如果您的JavaScript对象的名称类似于"响应"

var response = {
  "Results": [
    {
      "Key": "UserID",
      "Value": "40372"
    }
  ]
}

您可以访问键/值对:

var user = {}
for (var obj in response.Results)
{
  user[response.Results[obj].Key] = response.Results[obj].Value;
}

console.log(user); // Object {UserID: "40372"}
带有工作示例的

Here's a plunker(确保打开JavaScript控制台,没有结果写入DOM)。

答案 1 :(得分:0)

我有一个问题的解决方案,最后我使用了GitHub提供的SwiftlyJSON库,这使得JSON在swift中变得更加简单。 Here是使用Swift中的JSON和Ray Wenderlich的SwiftlyJSON的一个很好的资源。无论如何,它不是一个特别优雅的解决方案,但它做了我需要的。

let json = JSON(data: data)
if let resultsArray = json["Results"].arrayValue {
    for x in resultsArray {
        var keyName:String = x["Key"].stringValue!
        var KeyValue:String = x["Value"].stringValue!
        switch keyName{
        case "UserID":
            UserID = KeyValue
        case "Name":
            Name = KeyValue
        case "Age":
            Age = KeyValue
        default:
            break
        }
    }
}