【问题标题】:JSON File Format issueJSON 文件格式问题
【发布时间】:2015-04-08 20:09:16
【问题描述】:

几天来,我一直在努力解决 JSON 问题,并意识到我犯了一个基本错误。当我在我的代码下面有一个 JSON 文件时,它可以完美运行:

{"team": [
        {
        "name": "Manchester United FC",
        "code": "MUFC"
        },
        {
        "name": "Swansea City",
        "code": "SWA"
        }
        ]
}

适用于上述 JSON 文件的代码:

func jsonParsing()
{
    let path: NSString = NSBundle.mainBundle().pathForResource("teams", ofType: "json")!

    var data : NSData = NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMapped, error: nil)!

    var dict: NSDictionary!=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary


    for var i = 0 ; i < (dict.valueForKey("team") as NSArray).count ; i++
    {
        arrDict.addObject((dict.valueForKey("team") as NSArray) .objectAtIndex(i))
    }



}

但是,当我的 JSON 文件没有以下标题的引号时,它会导致“致命错误:在展开可选值时意外发现 nil”问题:

{team: [
        {
        name: "Manchester United FC",
        code: "MUFC"
        },
        {
        name: "Swansea City",
        code: "SWA"
        }
        ]
}

所以,您可能会问,为什么我不简单地使用引号来使其有效?好吧,我从一个网站获取 JSON 信息,所以必须使用该格式。有关原始文件格式检查的完整详细信息:

http://api.football-data.org/alpha/soccerseasons/354/teams

那么,我可以使用一个简单的设置,以便它使用我的 JSON 文件而不需要所有的双引号?

非常感谢,艾伦。

【问题讨论】:

  • JSON 字典键是字符串,必须用引号括起来。 – 但是,我看不到您链接到的 JSON 中没有引号的键的位置,that 实际上是有效的 JSON。
  • 访问 json.org 并研究 JSON 语法。 (为你还没有这样做而感到羞耻。)
  • (当作为网页查看时,您引用的网站似乎缺少引号,但当您查看实际页面源时,引号就在那里。)
  • 你好 Hot Licks,我确实研究过它,但我就是不明白为什么它看起来没有引号也能工作。原来我有一个 chrome 扩展来查看 JSON 文件,这意味着我没有意识到它们实际上在那里。当我点击“查看源代码”时,很明显他们在那里。于是混乱结束。对不起。

标签: ios iphone json swift


【解决方案1】:

这些引号是 JSON 工作所必需的。 http://www.w3schools.com/json/json_syntax.asp

【讨论】:

  • 纯粹是我的错误与 JSON chrome 查看器扩展有关。对不起,伙计们。
【解决方案2】:

以下似乎有效:

{
    //let path: NSString = NSBundle.mainBundle().pathForResource("teams", ofType: "json")!

    //var data : NSData = NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMapped, error: nil)!

let url2 = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams")

let data = NSData(contentsOfURL: url2!)

var dict = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary

    // var dict: NSDictionary!=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary


    for var i = 0 ; i < (dict.valueForKey("teams") as NSArray).count ; i++
    {
        arrDict.addObject((dict.valueForKey("teams") as NSArray) .objectAtIndex(i))
    }



}

但现在我更加困惑,因为每个人都说原始文件无效:/ 有人认为吗?

【讨论】:

  • api.football-data.org/alpha/soccerseasons/354/teams 的 JSON 有效,但您问题中的第二个 JSON 无效。它们是如何连接的?
  • 对不起,但我认为问题中的第二个 JSON 与来自 api.football-data.org/alpha/soccerseasons/354/teams 网站的 JSON 相同。如在键中没有使用引号。如果我的想法有误,请见谅。
  • 来自该网站的 JSON 中的键用引号括起来。所以其实一点问题都没有。
  • 非常抱歉,我有一个 chrome 中的 JSON 查看器,看起来它们不在引号中。单击“查看源代码”后,很明显我的错误是什么。非常感谢,艾伦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多