Skip to content

Commit c10c729

Browse files
author
wushangkun
committed
兼容Flutter json解析时,String和int、double类型不一致导致出错的情况
1 parent bd3167d commit c10c729

File tree

3 files changed

+94
-77
lines changed

3 files changed

+94
-77
lines changed

SKGenerateModelTool.dmg

137 KB
Binary file not shown.

SKGenerateModelTool.xcodeproj/xcshareddata/xcschemes/SKGenerateModelTool.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
</Testables>
3232
</TestAction>
3333
<LaunchAction
34-
buildConfiguration = "Debug"
34+
buildConfiguration = "Release"
3535
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3636
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
3737
launchStyle = "0"

SKGenerateModelTool/SKCodeBuilder.swift

Lines changed: 93 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ class SKCodeBuilder: NSObject {
3333
lazy var yymodelPropertyGenericClassDicts = NSMutableDictionary()
3434
lazy var handlePropertyMapper = NSMutableDictionary()
3535
lazy var allKeys = [String]()
36+
lazy var blankSpace = " ";
37+
lazy var blankSpace2 = " ";
38+
3639
// 适配json文件的注释
3740
var commentDicts:[String:String]?
41+
3842
// Dart => FromJson & ToJson
3943
lazy var fromJsonString = NSMutableString()
4044
lazy var toJsonString = NSMutableString()
41-
45+
4246
var fileType:String {
4347
get {
4448
if config.codeType == .Swift { return "swift" }
@@ -72,7 +76,7 @@ class SKCodeBuilder: NSObject {
7276
}
7377
} else if config.codeType == .Dart {
7478
hString.insert("\npart '\(fileName).m.dart';\n\n", at: 0)
75-
mString.insert("\npart of '\(fileName).dart';\n\n", at: 0)
79+
mString.insert("\npart of '\(fileName).dart';\n", at: 0)
7680
}
7781
let dateFormatter = DateFormatter()
7882
dateFormatter.dateFormat = "yyyy/MM/dd"
@@ -190,21 +194,21 @@ class SKCodeBuilder: NSObject {
190194
var modelName = config.rootModelName
191195
if key.isBlank { // Root model
192196
if config.superClassName.isBlank {
193-
hString.append("\nclass \(config.rootModelName) {\n\n")
197+
hString.append("class \(config.rootModelName) {\n")
194198
} else {
195-
hString.append("\nclass \(config.rootModelName) extends \(config.superClassName) {\n\n")
199+
hString.append("class \(config.rootModelName) extends \(config.superClassName) {\n")
196200
}
197201
} else { // sub model
198202
modelName = modelClassName(with: key)
199203
if config.superClassName.isBlank {
200-
hString.append("\nclass \(modelName) {\n\n")
204+
hString.append("\nclass \(modelName) {\n")
201205
} else {
202-
hString.append("\nclass \(modelName) extends \(config.superClassName) {\n\n")
206+
hString.append("\nclass \(modelName) extends \(config.superClassName) {\n")
203207
}
204208
}
205209
fromJsonString.append("\n\(modelName) _$\(modelName)FromJson(Map<String, dynamic> json, \(modelName) instance) {\n")
206210
toJsonString.append("\nMap<String, dynamic> _$\(modelName)ToJson(\(modelName) instance) {\n")
207-
toJsonString.append(" final Map<String, dynamic> json = new Map<String, dynamic>();\n")
211+
toJsonString.append(" final Map<String, dynamic> json = new Map<String, dynamic>();\n")
208212
}
209213

210214
switch dictValue {
@@ -237,21 +241,21 @@ class SKCodeBuilder: NSObject {
237241
} else if config.codeType == .Swift {
238242
hString.append(" /// \n var \(key): \(modelName)?\n")
239243
} else if config.codeType == .Dart {
240-
hString.append(" \(modelName) \(key);\n")
244+
hString.append(" \(modelName) \(key);\n")
241245
self.yymodelPropertyGenericClassDicts.setValue(modelName, forKey: key)
242246
let fString =
243247
"""
244-
if (json['\(key)'] != null) {
245-
instance.\(key) = new \(modelName)().fromJson(json['\(key)']);
246-
}
248+
\(blankSpace)if(json['\(key)'] != null) {
249+
\(blankSpace)\(blankSpace2)instance.\(key) = new \(modelName)().fromJson(json['\(key)']);
250+
\(blankSpace)}
247251
248252
"""
249253
fromJsonString.append(fString)
250254
let tString =
251255
"""
252-
if (instance.\(key) != null) {
253-
json['\(key)'] = instance.\(key).toJson();
254-
}
256+
\(blankSpace)if(instance.\(key) != null) {
257+
\(blankSpace)\(blankSpace2)json['\(key)'] = instance.\(key).toJson();
258+
\(blankSpace)}
255259
256260
"""
257261
toJsonString.append(tString)
@@ -269,20 +273,20 @@ class SKCodeBuilder: NSObject {
269273
} else if config.codeType == .Swift {
270274
hString.append(" /// <#泛型#>\n var \(key): Any?\n")
271275
} else if config.codeType == .Dart {
272-
hString.append(" dynamic \(key); //<#泛型#>\n")
276+
hString.append(" dynamic \(key); //<#泛型#>\n")
273277
let fString =
274278
"""
275-
if (json['\(key)'] != null) {
276-
instance.\(key) = json['\(key)'];
277-
}
279+
\(blankSpace)if(json['\(key)'] != null) {
280+
\(blankSpace)\(blankSpace2)instance.\(key) = json['\(key)'];
281+
\(blankSpace)}
278282
279283
"""
280284
fromJsonString.append(fString)
281285
let tString =
282286
"""
283-
if (instance.\(key) != null) {
284-
json['\(key)'] = instance.\(key);
285-
}
287+
\(blankSpace)if(instance.\(key) != null) {
288+
\(blankSpace)\(blankSpace2)json['\(key)'] = instance.\(key);
289+
\(blankSpace)}
286290
287291
"""
288292
toJsonString.append(tString)
@@ -316,15 +320,15 @@ class SKCodeBuilder: NSObject {
316320
let headerString =
317321
"""
318322
319-
\(modelName) fromJson(Map<String, dynamic> json) => _$\(modelName)FromJson(json, this);
320-
Map<String, dynamic> toJson() => _$\(modelName)ToJson(this);
323+
\(blankSpace)\(modelName) fromJson(Map<String, dynamic> json) => _$\(modelName)FromJson(json, this);
324+
\(blankSpace)Map<String, dynamic> toJson() => _$\(modelName)ToJson(this);
321325
322326
"""
323327
hString.append(headerString);
324328
hString.append("}\n")
325329

326-
fromJsonString.append(" return instance;\n");
327-
toJsonString.append(" return json;\n");
330+
fromJsonString.append(" return instance;\n");
331+
toJsonString.append(" return json;\n");
328332
}
329333
if !key.isBlank {
330334
self.handleDicts.removeObject(forKey: key)
@@ -401,22 +405,22 @@ class SKCodeBuilder: NSObject {
401405
if let firstObject = arrayValue.first {
402406
if firstObject is String {
403407
// String 类型
404-
hString.append(" List<String> \(key); \(singlelineCommentName(key, firstObject as! String, false))\n")
408+
hString.append(" List<String> \(key); \(singlelineCommentName(key, firstObject as! String, false))\n")
405409

406410
let fString =
407411
"""
408-
if (json['\(key)'] != null) {
409-
instance.\(key) = new List<String>();
410-
instance.\(key) = json['\(key)']?.map((v) => v?.toString())?.toList()?.cast<String>();
411-
}
412+
\(blankSpace)if(json['\(key)'] != null) {
413+
\(blankSpace)\(blankSpace2)instance.\(key) = new List<String>();
414+
\(blankSpace)\(blankSpace2)instance.\(key) = json['\(key)']?.map((v) => v?.toString())?.toList()?.cast<String>();
415+
\(blankSpace)}
412416
413417
"""
414418
fromJsonString.append(fString)
415419
let tString =
416420
"""
417-
if (instance.\(key) != null) {
418-
json['\(key)'] = instance.\(key);
419-
}
421+
\(blankSpace)if(instance.\(key) != null) {
422+
\(blankSpace)\(blankSpace2)json['\(key)'] = instance.\(key);
423+
\(blankSpace)}
420424
421425
"""
422426
toJsonString.append(tString)
@@ -427,24 +431,24 @@ class SKCodeBuilder: NSObject {
427431
let modeName = modelClassName(with: key)
428432
self.handleDicts.setValue(firstObject, forKey: key)
429433
self.yymodelPropertyGenericClassDicts.setValue(modeName, forKey: key)
430-
hString.append(" List<\(modeName)> \(key); \(singlelineCommentName(key, "", false))\n")
434+
hString.append(" List<\(modeName)> \(key); \(singlelineCommentName(key, "", false))\n")
431435
let fString =
432436
"""
433-
if (json['\(key)'] != null) {
434-
instance.\(key) = new List<\(modeName)>();
435-
(json['\(key)'] as List).forEach((v) {
436-
instance.\(key).add(new \(modeName)().fromJson(v));
437-
});
438-
}
437+
\(blankSpace)if(json['\(key)'] != null) {
438+
\(blankSpace)\(blankSpace2)instance.\(key) = new List<\(modeName)>();
439+
\(blankSpace)\(blankSpace2)(json['\(key)'] as List).forEach((v) {
440+
\(blankSpace)\(blankSpace2)\(blankSpace2)instance.\(key).add(new \(modeName)().fromJson(v));
441+
\(blankSpace)\(blankSpace2)});
442+
\(blankSpace)}
439443
440444
"""
441445
fromJsonString.append(fString)
442-
446+
443447
let tString =
444448
"""
445-
if (instance.\(key) != null) {
446-
json['\(key)'] = instance.\(key).map((v) => v.toJson()).toList();
447-
}
449+
\(blankSpace)if(instance.\(key) != null) {
450+
\(blankSpace)\(blankSpace2)json['\(key)'] = instance.\(key).map((v) => v.toJson()).toList();
451+
\(blankSpace)}
448452
449453
"""
450454
toJsonString.append(tString)
@@ -459,19 +463,19 @@ class SKCodeBuilder: NSObject {
459463

460464
let fString =
461465
"""
462-
if (json['\(key)'] != null) {
463-
instance.\(key) = new List<dynamic>();
464-
instance.\(key).addAll(json['\(key)']);
465-
}
466+
\(blankSpace)if(json['\(key)'] != null) {
467+
\(blankSpace)\(blankSpace2)instance.\(key) = new List<dynamic>();
468+
\(blankSpace)\(blankSpace2)instance.\(key).addAll(json['\(key)']);
469+
\(blankSpace)}
466470
467471
"""
468472
fromJsonString.append(fString)
469-
473+
470474
let tString =
471475
"""
472-
if (instance.\(key) != null) {
473-
json['\(key)'] = [];
474-
}
476+
\(blankSpace)if(instance.\(key) != null) {
477+
\(blankSpace)\(blankSpace2)json['\(key)'] = [];
478+
\(blankSpace)}
475479
476480
"""
477481
toJsonString.append(tString)
@@ -481,7 +485,7 @@ class SKCodeBuilder: NSObject {
481485
}
482486

483487
private func handleIdNumberValue(numValue:NSNumber, key:String, hString:NSMutableString, ignoreIdValue:Bool) {
484-
488+
485489
let numType = CFNumberGetType(numValue as CFNumber)
486490

487491
switch numType {
@@ -493,17 +497,23 @@ class SKCodeBuilder: NSObject {
493497
} else if config.codeType == .Swift {
494498
hString.append(" /// \(commentName(key, "\(numValue)"))\n var \(key): Double?\n")
495499
} else if config.codeType == .Dart {
496-
hString.append(" double \(key); \(singlelineCommentName(key, "\(numValue)"))\n")
500+
hString.append(" double \(key); \(singlelineCommentName(key, "\(numValue)"))\n")
501+
497502
let fString =
498503
"""
499-
if (json['\(key)'] != null) {
500-
instance.\(key) = json['\(key)']?.toDouble();
501-
}
504+
\(blankSpace)if(json['\(key)'] != null) {
505+
\(blankSpace)\(blankSpace2)final \(key) = json['\(key)'];
506+
\(blankSpace)\(blankSpace2)if(\(key) is String) {
507+
\(blankSpace)\(blankSpace2)\(blankSpace2)instance.\(key) = double.parse(\(key));
508+
\(blankSpace)\(blankSpace2)} else {
509+
\(blankSpace)\(blankSpace2)\(blankSpace2)instance.\(key) = \(key)?.toDouble();
510+
\(blankSpace)\(blankSpace2)}
511+
\(blankSpace)}
502512
503513
"""
504514
fromJsonString.append(fString)
505515

506-
let tString = " json['\(key)'] = instance.\(key);\n"
516+
let tString = " json['\(key)'] = instance.\(key);\n"
507517
toJsonString.append(tString)
508518
}
509519

@@ -515,17 +525,17 @@ class SKCodeBuilder: NSObject {
515525
} else if config.codeType == .Swift {
516526
hString.append(" /// \(commentName(key, (numValue.boolValue == true ? "true" : "false")))\n var \(key): Bool = false\n")
517527
} else if config.codeType == .Dart {
518-
hString.append(" bool \(key); \(singlelineCommentName(key, (numValue.boolValue == true ? "true" : "false")))\n")
528+
hString.append(" bool \(key); \(singlelineCommentName(key, (numValue.boolValue == true ? "true" : "false")))\n")
519529
let fString =
520530
"""
521-
if (json['\(key)'] != null) {
522-
instance.\(key) = json['\(key)'];
523-
}
531+
\(blankSpace)if(json['\(key)'] != null) {
532+
\(blankSpace)\(blankSpace2)instance.\(key) = json['\(key)'];
533+
\(blankSpace)}
524534
525535
"""
526536
fromJsonString.append(fString)
527537

528-
let tString = " json['\(key)'] = instance.\(key);\n"
538+
let tString = " json['\(key)'] = instance.\(key);\n"
529539
toJsonString.append(tString)
530540
}
531541
} else {
@@ -561,24 +571,31 @@ class SKCodeBuilder: NSObject {
561571
}
562572

563573
if config.codeType == .Dart {
564-
hString.append(" int \(key); \(singlelineCommentName(key, "\(intValue)"))\n")
574+
hString.append(" int \(key); \(singlelineCommentName(key, "\(intValue)"))\n")
575+
565576
let fString =
566577
"""
567-
if (json['\(key)'] != null) {
568-
instance.\(key) = json['\(key)']?.toInt();
569-
}
578+
\(blankSpace)if(json['\(key)'] != null) {
579+
\(blankSpace)\(blankSpace2)final \(key) = json['\(key)'];
580+
\(blankSpace)\(blankSpace2)if(\(key) is String) {
581+
\(blankSpace)\(blankSpace2)\(blankSpace2)instance.\(key) = int.parse(\(key));
582+
\(blankSpace)\(blankSpace2)} else {
583+
\(blankSpace)\(blankSpace2)\(blankSpace2)instance.\(key) = \(key)?.toInt();
584+
\(blankSpace)\(blankSpace2)}
585+
\(blankSpace)}
570586
571587
"""
588+
572589
fromJsonString.append(fString)
573590

574-
let tString = " json['\(key)'] = instance.\(key);\n"
591+
let tString = " json['\(key)'] = instance.\(key);\n"
575592
toJsonString.append(tString)
576593
}
577594
}
578595

579596
/// String
580597
private func handleIdStringValue(idValue: String, key:String, hString:NSMutableString, ignoreIdValue:Bool) {
581-
598+
582599
if config.codeType == .OC {
583600
if key == "id" && !ignoreIdValue {
584601
// 字符串id 替换成 itemId
@@ -601,24 +618,24 @@ class SKCodeBuilder: NSObject {
601618
} else if config.codeType == .Dart {
602619
if key == "id" && !ignoreIdValue {
603620
self.handlePropertyMapper.setValue("id", forKey: "itemId")
604-
hString.append(" String \(key); \(singlelineCommentName(key, idValue))\n")
621+
hString.append(" String \(key); \(singlelineCommentName(key, idValue))\n")
605622
} else {
606623
if idValue.count > 12 {
607-
hString.append(" String \(key); \(singlelineCommentName(key, idValue, false))\n")
624+
hString.append(" String \(key); \(singlelineCommentName(key, idValue, false))\n")
608625
} else {
609-
hString.append(" String \(key); \(singlelineCommentName(key, idValue))\n")
626+
hString.append(" String \(key); \(singlelineCommentName(key, idValue))\n")
610627
}
611628
}
612629
let fString =
613630
"""
614-
if (json['\(key)'] != null) {
615-
instance.\(key) = json['\(key)']?.toString();
616-
}
631+
\(blankSpace)if(json['\(key)'] != null) {
632+
\(blankSpace)\(blankSpace2)instance.\(key) = json['\(key)']?.toString();
633+
\(blankSpace)}
617634
618635
"""
619636
fromJsonString.append(fString)
620637

621-
let tString = " json['\(key)'] = instance.\(key);\n"
638+
let tString = " json['\(key)'] = instance.\(key);\n"
622639
toJsonString.append(tString)
623640
}
624641
}

0 commit comments

Comments
 (0)