SexyJson is Swift3.+ json parse open source library quickly and easily, perfect supporting class and struct model, support the KVC model, fully oriented protocol architecture, support iOS and MAC OS X
Objective-c version π WHC_Model
- The definition of model must implement SexyJson protocol
- If you have any enumeration type must be specified in the definition of model data type and implementation SexyJsonEnumType protocol
- To KVC model must inherit NSObject and NSCoding protocol implementation
- iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.0+
- Xcode 8.0 or later
- Swift 3.0+
- CocoaPods: pod 'SexyJson'
This is an example of json:
let json = "{\"age\":25,\"enmuStr\":\"Work\",\"url\":\"https:\\/\\/www.baidu.com\",
\"subArray\":[{\"test3\":\"test3\",\"test2\":\"test2\",\"cls\":{\"age\":10,
\"name\":\"swift\"},\"test1\":\"test1\"},{\"test3\":\"test3\",\"test2\":\"test2\",
\"cls\":{\"age\":10,\"name\":\"swift\"},\"test1\":\"test1\"}],\"color\":\"0xffbbaa\",
\"nestArray\":[[{\"test\":\"test1\"},{\"test\":\"test2\"}],[{\"test\":\"test3\"},
{\"test\":\"test4\"}]],\"enmuInt\":10,\"sub\":{\"test1\":\"test1\",\"test2\":\"test2\",
\"test3\":\"test3\"},\"height\":175,\"intArray\":[1,2,3,4],\"name\":\"ε΄ζ΅·θΆ
\",
\"learn\":[\"iOS\",\"android\",\"js\",\"nodejs\",\"python\"]}"
The model class:
enum WorkEnum: String,SexyJsonEnumType {
case null = "nil"
case one = "Work"
case two = "Not Work"
}
enum IntEnum: Int,SexyJsonEnumType {
case zero = 0
case hao = 10
case xxx = 20
}
struct Model :SexyJson {
var age: Int = 0
var enmuStr: WorkEnum!
var url: URL!
var subArray: [SubArray]!
var color: UIColor!
var nestArray: [[NestArray]]?
var enmuInt: IntEnum = .xxx
var sub: Sub!
var height: Int = 0
var intArray: [Int]!
var name: String!
var learn: [String]!
/// Model mapping
public mutating func sexyMap(_ map: [String : Any]) {
age <<< map["age"]
enmuStr <<< map["enmuStr"]
url <<< map["url"]
subArray <<< map["subArray"]
color <<< map["color"]
nestArray <<< map["nestArray"]
enmuInt <<< map["enmuInt"]
sub <<< map["sub"]
height <<< map["height"]
intArray <<< map["intArray"]
name <<< map["name"]
learn <<< map["learn"]
}
}
You don't need to manually create the SexyJson model class you can use open source tools with the help of WHC_DataModel.app automatically created SexyJson model
Json is converted into a model object(json -> model)
let model = Model.sexy_json(json)
Model object converted into the dictionary(model -> dictionary)
let dictionary = model.sexy_dictionary()
Model object converted into the json string(model -> json)
let jsonStr = model.sexy_json()
SexyJson support json parse the key path
let subArrayModel = SubArray.sexy_json(json, keyPath: "subArray[0]")
let subNestArray = NestArray.sexy_json(json, keyPath: "nestArray[0][0]")
let test = String.sexy_json(json, keyPath: "nestArray[0][0].test")
Json is converted into a model array object(json -> [model])
let arrayModel = [Model].sexy_json(json)
Model object array converted into the array([model] -> array)
let array = arrayModel.sexy_array()
Model object array converted into the json string([model] -> json)
let arrayJson = arrayModel.sexy_json()
SexyJson support model kvc
let sub = Sub.sexy_json(json, keyPath: "sub")
let subData = NSKeyedArchiver.archivedData(withRootObject: sub!)
let subCoding = NSKeyedUnarchiver.unarchiveObject(with: subData) as? Sub
let subPy = subCoding?.copy() as? Sub
If you want to view the analytical results, please download this demo to check the specific usage
All source code is licensed under the MIT License.