【问题标题】:Parsing JSON in swift inconsistent快速解析JSON不一致
【发布时间】:2016-01-26 18:43:51
【问题描述】:

我遇到了我认为是错误的问题。我有一个从服务器返回的对象数组。但是,当从中提取值时,我会得到不一致的结果。这些项目中的每一项都在服务器响应的同一数组中:

当我尝试提取此值的quantity 值时,它会返回Int

{
    address = "4040 MARKET ST RM 226";
    city = PHILADELPHIA;
    ln = "AMOXICILLIN 500 MG CAPSULE";
    ndc = 57237003105;
    npi = 1619912375;
    "pharmacy_name" = "GRACE PHARMACY INC";
    phone = "(215)895-5594";
    price = "8.00";
    quantity = 500;
    state = PA;
    vendor = una;
    zip = 19104;
}

但是,当我尝试从中提取 quantity 时,它会以 String 的形式返回。

{
    address = "1826 Chestnut St # 30";
    brand = G;
    city = Philadelphia;
    distance = "0.06";
    latitude = "39.951747";
    ln = "AMOXICILLIN 500 MG CAPSULE";
    longitude = "-75.171154";
    "ncpdp_id" = 3969485;
    ndc = 65862001705;
    "pharmacy_hours_of_operation" = "Open 24 Hours";
    "pharmacy_name" = "CVS PHARMACY";
    phone = "(215)972-0909";
    price = "11.82";
    quantity = 30;
    state = PA;
    vendor = scriptsave;
    zip = "19103-4902";
}

到底为什么会发生这种情况?两个对象似乎是相同的,除了一个中的一些额外值。

===

像这样序列化 JSON:

let searchResultsJSON: NSDictionary = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) as! NSDictionary

像这样获取值:

    quantity            = formDictionary["quantity"] as? Int
    quantityString      = formDictionary["quantity"] as? String

====

这是 JSON:

results =     (
                {
            address = "4040 MARKET ST RM 226";
            city = PHILADELPHIA;
            ln = "ESOMEPRAZOLE MAG DR 40 MG CAP";
            ndc = 13668015510;
            npi = 1619912375;
            "pharmacy_name" = "GRACE PHARMACY INC";
            phone = "(215)895-5594";
            price = "74.00";
            quantity = 1000;
            state = PA;
            vendor = una;
            zip = 19104;
        },
{
            address = "1700 Market St";
            brand = G;
            city = Philadelphia;
            distance = "0.22";
            latitude = "39.952981";
            ln = "ESOMEPRAZOLE MAG DR 40 MG CAP";
            longitude = "-75.168431";
            "ncpdp_id" = 3985059;
            ndc = 00378235193;
            "pharmacy_hours_of_operation" = "S(Clsd) M(8a-6p) T(8a-6p) W(8a-6p) T(8a-6p) F(8a-6p) S(9a-12p)";
            "pharmacy_name" = "PICKWICK PHARMACY INC";
            phone = "(215)563-4860";
            price = "241.23";
            quantity = 30;
            state = PA;
            vendor = scriptsave;
            zip = "19103-3913";
        }
    );

所以在这里,第一个中的quantity 在第二个中返回为IntString。我开始认为这是服务器端问题...

===

在 Chrome 中查看 JSON 确实可以确认它是来自服务器的编码错误。谢谢@CouchDeveloper

【问题讨论】:

  • 你用什么代码来获取数量值?
  • 你用什么来解析 JSON?
  • @TahTatsumoto 我已经更新了我的问题。感谢您的快速回复。
  • @Jeremiah 我已经更新了我的问题。感谢您的快速回复。
  • 如果您可以发布 JSON(== 一个字符串,以 JSON 编码),那就更好了。您的打印似乎是代表 JSON 的对象的控制台日志。

标签: ios json swift parsing


【解决方案1】:

Apple 的 JSONSerialization API 在 Swift 中的使用有点讨厌。 如果您乐于使用第三方框架,SwiftyJSON 将帮助您以类型安全的方式快速处理 JSON。它可以作为 Cocoapod 使用,使用 Carthage 甚至 Swift 自己的包管理器。

然后您可以确保获得非零整数或字符串对象,如下所示:

let name = json["name"].stringValue
let number = json["number"].intValue

或者您可以像这样将不存在的值作为可选项处理:

let name = json["name"].string
let number = json["number"].int

【讨论】:

  • 如果我无法进行其他工作,我会试一试。我很感激!
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多