Skip to content

Commit

Permalink
升级json转模型和模型转json架构,更高效强大
Browse files Browse the repository at this point in the history
  • Loading branch information
netyouli committed Jul 13, 2016
1 parent e019550 commit c3a4a82
Show file tree
Hide file tree
Showing 13 changed files with 772 additions and 459 deletions.
19 changes: 13 additions & 6 deletions JsonModel/JsonModel.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

/* Begin PBXBuildFile section */
849EB1541CE9A78500248AC4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 849EB1531CE9A78500248AC4 /* main.m */; };
849EB15C1CE9A79500248AC4 /* WHC_DataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 849EB15B1CE9A79500248AC4 /* WHC_DataModel.m */; };
FE3700F91D35DA3A006AD222 /* NSObject+WHC_Model.m in Sources */ = {isa = PBXBuildFile; fileRef = FE3700F81D35DA3A006AD222 /* NSObject+WHC_Model.m */; };
FEF3ACB91D34EC7D00B7E299 /* TestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF3ACB81D34EC7D00B7E299 /* TestModel.m */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
Expand All @@ -26,8 +27,10 @@
/* Begin PBXFileReference section */
849EB1501CE9A78500248AC4 /* JsonModel */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = JsonModel; sourceTree = BUILT_PRODUCTS_DIR; };
849EB1531CE9A78500248AC4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
849EB15A1CE9A79500248AC4 /* WHC_DataModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WHC_DataModel.h; path = ../WHC_DataModel.h; sourceTree = "<group>"; };
849EB15B1CE9A79500248AC4 /* WHC_DataModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WHC_DataModel.m; path = ../WHC_DataModel.m; sourceTree = "<group>"; };
FE3700F71D35DA3A006AD222 /* NSObject+WHC_Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+WHC_Model.h"; sourceTree = "<group>"; };
FE3700F81D35DA3A006AD222 /* NSObject+WHC_Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+WHC_Model.m"; sourceTree = "<group>"; };
FEF3ACB71D34EC7D00B7E299 /* TestModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestModel.h; sourceTree = "<group>"; };
FEF3ACB81D34EC7D00B7E299 /* TestModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestModel.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -44,8 +47,8 @@
849EB1471CE9A78500248AC4 = {
isa = PBXGroup;
children = (
849EB15A1CE9A79500248AC4 /* WHC_DataModel.h */,
849EB15B1CE9A79500248AC4 /* WHC_DataModel.m */,
FE3700F71D35DA3A006AD222 /* NSObject+WHC_Model.h */,
FE3700F81D35DA3A006AD222 /* NSObject+WHC_Model.m */,
849EB1521CE9A78500248AC4 /* JsonModel */,
849EB1511CE9A78500248AC4 /* Products */,
);
Expand All @@ -63,6 +66,8 @@
isa = PBXGroup;
children = (
849EB1531CE9A78500248AC4 /* main.m */,
FEF3ACB71D34EC7D00B7E299 /* TestModel.h */,
FEF3ACB81D34EC7D00B7E299 /* TestModel.m */,
);
path = JsonModel;
sourceTree = "<group>";
Expand Down Expand Up @@ -123,7 +128,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
849EB15C1CE9A79500248AC4 /* WHC_DataModel.m in Sources */,
FE3700F91D35DA3A006AD222 /* NSObject+WHC_Model.m in Sources */,
FEF3ACB91D34EC7D00B7E299 /* TestModel.m in Sources */,
849EB1541CE9A78500248AC4 /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -245,6 +251,7 @@
849EB1591CE9A78500248AC4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "../WHC_DataModel.m"
timestampString = "490068914.819778"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "421"
endingLineNumber = "421"
landmarkName = "+handleDataModelEngine:calss:classPrefix:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0730"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "849EB14F1CE9A78500248AC4"
BuildableName = "JsonModel"
BlueprintName = "JsonModel"
ReferencedContainer = "container:JsonModel.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "849EB14F1CE9A78500248AC4"
BuildableName = "JsonModel"
BlueprintName = "JsonModel"
ReferencedContainer = "container:JsonModel.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "849EB14F1CE9A78500248AC4"
BuildableName = "JsonModel"
BlueprintName = "JsonModel"
ReferencedContainer = "container:JsonModel.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "849EB14F1CE9A78500248AC4"
BuildableName = "JsonModel"
BlueprintName = "JsonModel"
ReferencedContainer = "container:JsonModel.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>JsonModel.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>849EB14F1CE9A78500248AC4</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>
39 changes: 39 additions & 0 deletions JsonModel/JsonModel/TestModel.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//
// TestModel.h
// JsonModel
//
// Created by WHC on 16/7/12.
// Copyright © 2016年 whc. All rights reserved.
//

#import <Foundation/Foundation.h>


@interface JS_Authors :NSObject
@property (nonatomic , copy) NSString * firstName;
@property (nonatomic , copy) NSString * genre;
@property (nonatomic , copy) NSString * lastName;

@end

@interface JS_Programmers :NSObject
@property (nonatomic , copy) NSString * firstName;
@property (nonatomic , copy) NSString * email;
@property (nonatomic , copy) NSString * lastName;

@end

@interface JS_Musicians :NSObject
@property (nonatomic , copy) NSString * firstName;
@property (nonatomic , copy) NSString * instrument;
@property (nonatomic , copy) NSString * lastName;

@end

@interface TestModel :NSObject
@property (nonatomic , strong) NSArray * authors;
@property (nonatomic , strong) NSArray * programmers;
@property (nonatomic , strong) NSArray * musicians;

@end

23 changes: 23 additions & 0 deletions JsonModel/JsonModel/TestModel.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// TestModel.m
// JsonModel
//
// Created by WHC on 16/7/12.
// Copyright © 2016年 whc. All rights reserved.
//

#import "TestModel.h"

@implementation TestModel

@end
@implementation JS_Authors

@end
@implementation JS_Programmers

@end
@implementation JS_Musicians

@end

42 changes: 30 additions & 12 deletions JsonModel/JsonModel/main.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,22 @@
*/

#import <Foundation/Foundation.h>
#import "WHC_DataModel.h"
#import "TestModel.h"
#import "NSObject+WHC_Model.h"

@interface TXT : NSObject
@interface JS_TXT : NSObject
@property (nonatomic, copy)NSString * test;
@property (nonatomic, strong) NSNumber * tt;
@end

@implementation TXT
@implementation JS_TXT
@end

@interface WHC : NSObject
@property (nonatomic, copy) NSString * Demo;
@property (nonatomic, strong) TXT * txt;
@property (nonatomic, strong) JS_TXT * txt;
@property (nonatomic, strong) NSNumber * dd;
@property (nonatomic, assign) NSInteger age;
@end

@implementation WHC
Expand All @@ -42,26 +44,42 @@ @implementation WHC
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");

/// WHC_DataModel 支持无限类嵌套(字典/数组),高效的数据解析引擎(深度递归)
/// WHC_DataModel 强大的容错机制(允许json里的key和类型模型属性名称字符大小写可以不一样照样解析)

NSString * testJson = @"{ \"programmers\": [ { \"firstName\": \"Brett\", \"lastName\":\"McLaughlin\",\"email\": \"brett@newInstance.com\" }, { \"firstName\": \"Jason\", \"lastName\":\"Hunter\",\"email\": \"jason@servlets.com\" }, { \"firstName\": \"Elliotte\", \"lastName\":\"Harold\",\"email\": \"elharo@macfaq.com\" } ], \"authors\": [ { \"firstName\": \"Isaac\",\"lastName\": \"Asimov\", \"genre\": \"science fiction\" }, { \"firstName\": \"Tad\",\"lastName\": \"Williams\", \"genre\": \"fantasy\" }, { \"firstName\": \"Frank\",\"lastName\": \"Peretti\", \"genre\": \"christian fiction\" } ], \"musicians\": [{ \"firstName\": \"Eric\", \"lastName\": \"Clapton\", \"instrument\": \"guitar\" },{ \"firstName\": \"Sergei\", \"lastName\": \"Rachmaninoff\", \"instrument\": \"piano\" } ] }";

//// json转model
TestModel * model = [TestModel modelWithJson:testJson classPrefix:@"JS_"];

/// 模型转json
NSLog(@"%@",[model json]);


NSLog(@"========================================");
/// WHC_Model 支持无限类嵌套(字典/数组),高效的数据解析引擎(深度递归)
/// WHC_Model 强大的容错机制(允许json里的key和类型模型属性名称字符大小写可以不一样照样解析)

/// 使用简单演示例子
NSDictionary * jsonDict = @{@"demo":@"模型类转换测试",@"Dd":@(32),@"TXT":@{@"tEst":@"123456",@"tt":@(12)}};
NSDictionary * jsonDict = @{@"demo":@"模型类转换测试",@"Dd":@(32),@"age":@(25),@"TXT":@{@"tEst":@"123456",@"tt":@(12)}};


/// json转模型示例
WHC * whc = [WHC_DataModel dataModelWithDictionary:jsonDict className:[WHC class]];
WHC * whc = [WHC modelWithDictionary:jsonDict];

/// 自定义添加解析模型类前缀
WHC * whc1 = [WHC modelWithDictionary:jsonDict classPrefix:@"JS_"];

/// 模型转json示例
NSString * whcJson = [WHC_DataModel jsonWithDataModel:whc];
NSString * whcJson = [whc json];
NSLog(@"whcJson = %@",whcJson);

NSString * whcJson1 = [whc1 json];
NSLog(@"whcJson = %@",whcJson1);

/// 其他api接口就不一一演示请看WHC_DataModel.h api文档说明
NSLog(@"========================================");
/// 其他api接口就不一一演示请看WHC_Model api文档说明
/// github文档:https://github.com/netyouli/WHC_DataModel
/// 如果结合本示例和WHC_DataModel.h api文档说明最后还是不会使用那么我建议你放弃做iOS开发。
/// 如果结合本示例和WHC_Model api文档说明最后还是不会使用那么我建议你放弃做iOS开发。
}
return 0;
}
Loading

0 comments on commit c3a4a82

Please sign in to comment.