快速解析 Json

Posted

技术标签:

【中文标题】快速解析 Json【英文标题】:Parse Json swift 【发布时间】:2019-04-29 12:53:21 【问题描述】:

如何在带有数字元素的 json 中检索信息? 我必须快速获取 Json 中的信息,但我有数字元素,我不知道如何获取这些部分的信息。

在我的 Json 中,我设法恢复了一些信息,没有问题。但是那些有标题的人我不能包含一个数字,因为我不能声明一个变量“1”例如。我在day中取元素标题,但不知道如何在排名中取1中的信息点

Json的url是:https://www.lnr.fr/flux/rankings?id_competition=prod2

class Classification: Codable 
    let channel : Channel
    let classification : [Day]

    init(channel: Channel ,classification: [Day] ) 
        self.channel = channel
        self.classification = classification
    


class Channel: Codable 
    let title: String

    init (title: String) 
        self.title = title
    


class Day: Codable 
    let day: day

    init(day: day) 
        self.day = day
    


class day: Codable 
    let title: String
    let rankings : Equipe

    init(title: String, rankings: Equipe) 
        self.title = title
        self.rankings = rankings
    


class Equipe: Codable 

    let club: Club
    let difference: String
    let points: String
    let points_marques: String
    let points_encaisses: String
    let nombre_matchs_joues: String
    let nombre_matchs_gagnes: String
    let nombre_matchs_nuls: String
    let nombre_matchs_perdus: String

    init(club: Club,difference: String, points: String, points_marques: String, points_encaisses: String, nombre_matchs_joues: String, nombre_matchs_gagnes: String, nombre_matchs_nuls: String, nombre_matchs_perdus: String) 

        self.club = club
        self.difference = difference
        self.points = points
        self.points_marques = points_marques
        self.points_encaisses = points_encaisses
        self.nombre_matchs_joues = nombre_matchs_joues
        self.nombre_matchs_gagnes = nombre_matchs_gagnes
        self.nombre_matchs_nuls = nombre_matchs_nuls
        self.nombre_matchs_perdus = nombre_matchs_perdus
    


class Club: Codable 
    let name: String
    let url: logo

    init(name: String, url: logo) 
        self.name = name
        self.url = url
    


class logo: Codable 
    let url: String

    init(url: String) 
        self.url = url
    

【问题讨论】:

Swift 4 parsing json numeric keys with 1+n amount的可能重复 【参考方案1】:

您可以为此使用自定义 CodingKeys;结帐Encoding and Decoding Custom Types

例子:

struct Foo: Codable 
    var bar: String
    var baz: Int

    enum CodingKeys: String, CodingKey 
        case bar = "1"
        case baz = "2"
    


let json = "\"1\":\"bar\",\"2\":\"baz\"".data(using: .utf8)
let decoder = JSONDecoder()
let foo = try decoder.decode(Foo.self, from: json)
// foo.bar = 'bar'
// foo.baz = 'baz'

// this also works with encoding
let foo = Foo(bar: "MyBar", baz: "MyBaz")
// foo encodes to "1":"MyBar", "2":"MyBaz"

嵌套示例 结构 FooBar:可编码 var foo: 富 var bar: 字符串 var baz: 整数

struct Foo: Codable 
    var bar1: String
    var bar2: String
    var bar3: String
    var bar4: String
    var bar5: String
    var bar6: String

    enum CodingKeys: String, CodingKey 
        case bar1 = "1"
        case bar2 = "2"
        case bar3 = "3"
        case bar4 = "4"
        case bar5 = "5"
        case bar6 = "6"
    

这个和json结构一样:


  "foo": 
    "1": "One",
    "2": "Two",
    "3": "Three",
    "4": "Four",
    "5": "Five",
    "6": "Six"
  ,
  "bar": "Barrr",
  "baz": "Bazz"

【讨论】:

我不明白如何使用它。我必须使用 struc 和案例,但我如何才能在我的案例中加入这个 您不必使用结构,但对于您的用例,我可能会使用结构而不是类(查看Building Better Apps with Value Types in Swift 了解更多信息)。现在会发生的是json "1":"bar","2":"baz" 将被转换为struct Foo.bar == 'bar' and baz == 'baz' 我很抱歉,但我不明白,在我的 json 和我的代码中,我必须添加什么才能做到这一点? 仔细查看我给定的示例和您的 JSON 输出。你说键rankings是一个单一的Equipe,不是这样的,排名是16键的字典(“1”到“16”)。所以你需要另一个“介于两者之间”的课程。最好将 rankings 设为实际数组而不是字典,然后您可以这样做:rankings: [Equipe] 并且您不需要 CodingKeys 上课日:Codable let title: String let rankings : [Equipe] init(title: String, rankings: [Equipe]) self.title = title self.rankings = rankings 像这样?但它不起作用【参考方案2】:

您可以使用 CodingKeys

例子:

struct MyModel: Codable 

    let first: String

    enum CodingKeys: String, CodingKey 
       case first = "1"
    
 

【讨论】:

你有我的 Json 的例子吗? 问题是:理论上这些数字是无限的吗? 如果是这样,你也可以把这个json解码为[Int: Model]的字典

以上是关于快速解析 Json的主要内容,如果未能解决你的问题,请参考以下文章

快速解析json

快速解析 Json

如何快速解析这个特定的 json

python json快速解析命令

快速解析动态键的json响应问题

如何快速解析这个 JSON 数据