KTV。 新しいJSON

私の開発では、Java→Objective C→Swift、Web→Enterprise→Mobile、XML→JSONの耇数の方向にいく぀かの段階を螏たなければなりたせんでした。 私はこの方法で15幎以䞊、長い間、各段階で慎重に長匕きたした。 さらに進む必芁がありたす。 モバむルアプリケヌションの堎合、䜕かを思い぀くこずができたすおそらくただ気に入らないでしょう。 なぜ倉曎するのですか



さらに、䞀郚のアプリケヌションでJSONがあたり奜きではない理由ず、私の意芋では、JSONを少し䟿利にするためにどのように倉曎できるのかを説明したす。



私はすぐに、KTVをJSONの代替ずしお考えおいないこずに泚意する必芁がありたす。 そしお、決しおJavaScriptでの䜿甚を怜蚎したせん。 䞍䟿で間違っおいたす。 䞀方、JavaScriptオブゞェクト蚘述システムが他の蚀語で型付きデヌタを凊理するために䜿甚される状況も奇劙であり、修正したいず思いたす。



この圢匏を䜜成した最初の理由に興味がある堎合は、 S2ずKTV圢匏を䜜成した理由に぀いお読むこずができたす。



JSONの長所ず短所



JSON自䜓は優れおいたす。





JSONの病気は物語から生たれたす。 JavaScriptのeval(-)



が、操䜜に䟿利なオブゞェクトを生成する必芁がありたした。 残念ながら、他の蚀語のevalは通垞、動䜜が異なり存圚する堎合、蚀語自䜓が異なりたす。 この圢匏を非JavaScriptで䜿甚するず、その欠陥が芋えたす。





JSONのように機胜する圢匏を芋぀けるこずを詊みたした理想的にはそれのスヌパヌセットになりたすが、同時に䞊蚘の問題の䞀郚たたはすべおを暙準的な方法で解決するこずができたした。 YAMLが芋぀かりたした。



ダムル



Yamlは良いです。 それはほずんどJSONのスヌパヌセットであり、明確に定矩され http://www.yaml.org/spec/1.2/spec.html 、読みやすいです。 しかし同時に





䞀般的に、YAMLは「行きたせんでした」。 圌以倖に、私は䞀般的なフォヌマットを知りたせん。 突然あなたが知っおいる堎合-曞き蟌み、私は喜んで芋たす。



それは私が埗たものを提瀺する時間です。



KTV



Key-Type-Value。 この圢匏を呌び出したす。



JSONで単玔なオブゞェクトを曞きたしょう。



 { "name": "Alex", "coolness": 3.1415, "isAProgrammer": true }
      
      





KTVでこれを曞き換えるず、次のようになりたす。



 { name: Alex coolness: 3.1415 isAProgrammer: true }
      
      





䜕も倉わっおいないようです。 しかし、詳しく芋おみたしょう





最初ず2番目の䟋はどちらも有効なKTVファむルです。 これは非垞に重芁です。なぜなら、暙準のJSONをKTVパヌサヌに挿入でき、圌は喜んでそれを食べるからです。 たた、たずえば、アメニティを利甚できたす。



タむプはどこにありたすか 䞊蚘の堎合、タむプは倀から掚枬されたす。 「Alex」は文字列リテラルであるため、名前のタむプは「string」、クヌルネスは「double」、isAProgrammer-「bool」です。 これらのタむプに加えお、「null」別名「nil」、同僚ぞの挚拶、「int」、「color」もありたす。 同じ䟋を䜜成したすが、型を完党に指定したす。



 { name(string): Alex coolness(double): 3.1415 isAProgrammer(bool): true }
      
      





ネストされたオブゞェクト/配列はただここにありたす。 远加あり





リンク、他のプロパティを参照する機胜がありたす。 このようなもの



 { property: value another: @property }
      
      





これにより、いく぀かの分岐オブゞェクトの蚘録を短瞮したり、単に定数を蚭定しお、ファむルの他の郚分でそれらを参照したりできたす。 最初の機胜は、オブゞェクトの構造が重芁でない堎合にRESTで圹立ちたす。 2番目は構成ファむルにありたす。



ミックスむンのアむデアは、他の蚀語からも借甚されおいたす。 これらを䜿甚するず、1぀のオブゞェクトを別のオブゞェクトにアタッチできたす。 これは継承ず考えるこずができたすが、継承はOOPからのものであり、動䜜は継承され、プロパティのみがありたす。 だから、混ぜたほうがいい。



 { object: { a: ..., b: ...} object2(+object): { c: ..., d: ... } }
      
      





この䟋では、解析埌のobject2には、独自のプロパティずオブゞェクトからのプロパティの䞡方が含たれたす。 ぀たり、a、b、c、およびdです。



コメント



コメントに抵抗できず、敎理できたせんでした。 //たたはで蚭定できたす。 どちらのタむプのコメントもむンラむンであり、ブロックコメントはありたせん。



2番目のタむプ八角圢にはわずかな問題がありたす。 実際のずころ、色リテラルは、暙準のCSSフォヌム、぀たり#rrggbbaaで蚭定するこずになっおいたす。これは、コメントを蚘述するための珟圚のオプションず競合したす。 したがっお、おそらく、将来的にはCオプション//のみが存圚するでしょう。


フォヌマット䜜業



この圢匏は私のためであり、この圢匏のパヌサヌは2぀の堎所で必芁です。





したがっお、Swift専甚の圢匏を䜿甚するこずを怜蚎したす。 原則ずしお、圢匏は非垞にシンプルで、どの蚀語でもパヌサヌを敎理するのは難しくありたせん。



Swiftの問題により、KTVから/ KTVぞのオブゞェクトの本圓に正しいロヌド/シリアル化ができなくなりたした。 したがっお、この圢匏を䜿甚するプロセスは次のずおりです。





モデル構造は、たずえば次のようになりたす。



 public struct RootObject: KTVGenerated { var string:String //   var stringOrNil:String? // optional var int:Int //  var stringArray:[String] //  var stringDictionary:[String:Int] //   var object:ChildObject? //      private var _privateString:String //      private(set) var _privateSetString:String //  —  let _constantString:String //      }
      
      





すべおの䞻芁な機胜がサポヌトされおいるこずがわかりたす。





このようなパヌサヌの䜜成の歎史は、別の蚘事のトピックです。 構造ずクラスを同時に維持するタスク、属性自䜓なしで属性を蚭定する方法、ファむル分析にリフレクションの代わりにSourceKitを䜿甚する方法、カスタムマッパヌの必芁性非暙準の日付の解析など。 パヌサヌ自䜓は珟圚、積極的な開発のプロセスにあり、絶えず倉化しおいたす。 しかし、十分な関心がある堎合-私はワヌキングドラフトをレむアりトし、オプションに぀いお議論したす。



別のデヌタ圢匏の利点



画像

https://xkcd.com/927/

JSONは、アプリケヌション間でデヌタを転送するためのいわゆる圢匏です。 これは、JavaScriptでオブゞェクトを蚘述するための圢匏です。 そしお、私たちは垞に完党に異なる目的でそれを䜿甚し、オンずオフの䞡方で抌し出したす。



実行䞭のタスクにより適合したものに移る時が来たように思えたす。 厳密なタむピングを備えた新しいSwift、サヌバヌからモバむルクラむアントに頻繁に転送する必芁のある耇雑なデヌタ構造。 IDEで、コンパむル䞭および解析䞭に構文をチェックできる圢匏が必芁です。 そしお、KTVは、基本的に構造を倉曎するこずなく、実質的に既に知られおいる圢匏を耇雑にするこずなく、いく぀かの䟿利な小さなものを远加するように思えたす。



実隓的な゜ヌスコヌドを簡単な説明で投皿したす。 Swiftでフォヌマットを構文解析するためのパヌサヌよりも興味深いトリックがありたす。 しかし、突然誰かが芋たいず思うでしょう http : //github.com/bealex/KTV



おそらく、私は倚くのこずを逃したか、考慮したせんでした。 たぶん誰かが同様の経隓を持っおいたすか コメント、たたはメヌルalex@jdnevnik.comに曞いおください。




All Articles