KSON (j -> k)*

a JSON library

like GSON, but for Swift

*Very early proof of concept, subject to change completely

A Highlight Hackathon Project

This sucks

What if...

You could just define your class

You didn't have to do write any (de)serialization code

Introducing KSON

First make your models

Then initialize a KSON

Finally, make the object

Use the standard NSJSONSerialization Cocoa class to turn your JSON string into an NSDictionary

Wow this is really production ready after only one day?

NO

But it works

Demo

How does it work?

Magic

More specifically:

  • Swift doesn't have proper reflection
  • Objective-C has a powerful runtime library
  • You can make Swift classes extend from NSObject

So isn't it easy?

No, it's complicated

  • Swift properties are not necessarily supported from within Objective-C,
    • Therefore, must use as much of Swift's read-only reflection as possible (and it's not powerful enough)
  • Writing to Swift properties involves breaking out of the managed memory land
    • Therefore, there are probably memory leaks
  • You can't ask an Any value or Any.Type if it's an Array<SuperClass> if it's really an Array<Subclass>
    • This means we have to use NSArray and the meta-type property associated with them
    • If anyone figures this out, let me know

TODO more implementation details

Caveats

  • Must use NSArray and NSString
  • Memory may leak
    • But the leak instrument says there are no leaks
  • Performance
    • No time for benchmarks, but due to lots of Objective-C Swift jumps and reflection, it's likely slow
  • Only Array<String>, NSString, NSArray of JSON fully implemented
    • Proof of concept for primitive values
  • Code needs to be cleaned and API improved

It's GSON in Swift, that's awesome

But...

Thanks

For implementation, see github in the near future

kson

By bkase

kson

  • 2,909