在json中使用注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在json中使用注释相关的知识,希望对你有一定的参考价值。

参考技术A JSON为什么不能加注释?

添加注释 // 或者 /**/ 在JSON文件中是不允许的

JSON有两种数据结构:

名称/值对的集合:key : value样式;
值的有序列表:就是Array;
而在JSON的文档中说明只要是不符合上面两种结构的都不被支持,并提示错误( http://www.ietf.org/rfc/rfc7159.txt )

JSON如何才能加注释?

如果确实需要在.json文件中使用注释有两种方式:

使用key : value添加;

使用JSON.minify()函数;
通过使用JSON.minify(test.json)可以删除test.json文件中的注释及空格,从而使带有注释的.json文件通过编译

使用 JSON 文件在 MapKit 中添加 Swift 注释

【中文标题】使用 JSON 文件在 MapKit 中添加 Swift 注释【英文标题】:Add Swift annotations in MapKit with JSON file 【发布时间】:2018-11-14 22:24:13 【问题描述】:

我正在尝试通过 JSON 文件在 MapKitView 上添加注释。 这是我的代码:

// On récupère les valeurs JSON
func loadInitialData() 
    if let path = Bundle.main.path(forResource: "Playgrounds", ofType: "json") 
        do 
            let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
            let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves)
            print(jsonResult)
            let jsonResultAs = jsonResult as? Dictionary<String, AnyObject>
            print(jsonResultAs!)
            let playground = jsonResultAs!["playgrounds"] as? [Any]
            print(playground!)
            // 5
            let validWorks = playground.flatMap  Playground(json: $0) 
            playgrounds.append(validWorks!)
         catch 
            // handle error
        
    

此代码已执行。然后转到:

init?(json: [Any]) 
    // json[16] = on prend le 16ème paramètre de la réponse json. Pour le titre, s'il est null, on en met un par défaut
    self.title = json[6] as? String ?? "Aucun nom"
    //self.locationName = json[3] as! [String]()
    self.locationName = json[2] as? String ?? "Lieu non défini"
    //self.discipline = json[2] as! String
    self.discipline = ""
    // On récupère latitude et longitude en string puis on convertit en double
    if let latitude = Double(json[4] as! String),
        let longitude = Double(json[5] as! String) 
        self.coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
     else 
        self.coordinate = CLLocationCoordinate2D()
    

错误在线if let latitude = Double(json[4] as! String)

我不知道为什么它不起作用,我正在关注this tutorial,但我知道我错过了一些东西......我希望有人能帮助我!

我的 JSON 结构文件:

[
    ComLib = Ambronay;
    DepCode = 1;
    DepLib = Ain;
    EquEclairage = "-1";
    EquGpsX = "5.3625";
    EquGpsY = "46.0075";
    InsNom = "Terrain de basket";
    NatureLibelle = Decouvert;
    NatureSolLib = Sable;
, 
    ComLib = Ambutrix;
    DepCode = 1;
    DepLib = Ain;
    EquEclairage = "-1";
    EquGpsX = "5.34";
    EquGpsY = "45.93889";
    InsNom = "Ecole Primaire";
    NatureLibelle = Decouvert;
    NatureSolLib = Bitume;
,
etc...
]

谢谢。

【问题讨论】:

将 json 打包后发布,以便我们帮助您解码 【参考方案1】:

这一行

Double(json[4] as! String)

崩溃是因为 json 是一个字典数组,并且您想强制将字典强制转换为字符串,因为您可能需要旧方法

var allCoor = [CLLocationCoordinate2D]()

init?(json: [Any])  

    if let content = json as? [[String:Any]]  
       content.forEach 
          if let latitude = $0["EquGpsX"] as? String , let longitude = $0["EquGpsY"] as? String
             self.allCoor.append( CLLocationCoordinate2D(latitude:Double(latitude)!, longitude: Double(longitude)!))
          
          else 
            ///// 
           
       
     

但正确的方法是使用Codable

【讨论】:

以上是关于在json中使用注释的主要内容,如果未能解决你的问题,请参考以下文章

可以在 JSON 中使用注释吗?

如何使用 PHP 解码带有注释的 JSON 文件? [复制]

JSON怎么添加注释

解析 JSON 文件数据后,在结果 XML 中添加注释

Django 在 json 字段中注释特定键

如何在使用注释反序列化时订购 Json?