JSON.swift 629 B

123456789101112131415161718192021222324252627282930313233
  1. import Foundation
  2. protocol JSON: Codable {
  3. var string: String { get }
  4. init?(from: String)
  5. }
  6. extension JSON {
  7. var string: String {
  8. String(data: try! JSONEncoder().encode(self), encoding: .utf8)!
  9. }
  10. init?(from: String) {
  11. guard let data = from.data(using: .utf8),
  12. let object = try? JSONDecoder().decode(Self.self, from: data)
  13. else {
  14. return nil
  15. }
  16. self = object
  17. }
  18. }
  19. extension String: JSON {
  20. var string: String { self }
  21. init?(from: String) { self = from }
  22. }
  23. extension Double: JSON {}
  24. extension Int: JSON {}
  25. extension Bool: JSON {}