JSONModel Données JSON invalides
-
20-12-2019 - |
Question
J'ai ce JSON hors de l'API MVC ASP J'ai l'InvModel et le Lotmodel
mais quand j'appelle
_InvFeed = [[InvModel alloc] initFromURLWithString:@"http://192.168.1.206/service/api/dto/inventory/1?p=Red%20Globe"
completion:^(JSONModel *model, JSONModelError *err)
{
NSLog(@"Inventory: %@", _InvFeed );
NSLog(@"Error: %@",err);
}];
Je n'arrive pas à comprendre cette erreur :
Erreur:Domaine d'erreur = JSONModelErrorDomain Code = 1 "Données JSON invalides :Tentative d'initialisation de l'objet JSONModel à l'aide de initWithDictionary:error :mais le paramètre du dictionnaire n'était pas un 'NSDictionary'."
UserInfo=0x109075ff0 {NSLocalizedDescription=Données JSON invalides :Tentative d'initialisation de l'objet JSONModel à l'aide de initWithDictionary:error :Mais le paramètre du dictionnaire n'était pas un «nsdictionary»., kjsonmodelkeypath = lotdto}
et voici les JSONModels pour :LotDTO
#import "JSONModel.h"
@interface InvLotModel : JSONModel
@property (assign, nonatomic) int lotid;
@property (strong, nonatomic) NSDate* expdate;
@property (strong, nonatomic) NSString* lotserial;
@property (strong, nonatomic) NSDate* lastupddate;
@property (strong, nonatomic) NSString<Optional>* providerlotserial;
@property (assign, nonatomic) NSDecimal* qtyoriginal;
@property (assign, nonatomic) NSDecimal* qtyallocated;
@property (assign, nonatomic) NSDecimal* qtyavailable;
@property (assign, nonatomic) NSDecimal* qtyonhand;
@property (strong, nonatomic) NSDate* receiptdate;
@property (strong, nonatomic) NSString* linecomment;
@property (assign, nonatomic) NSDecimal* unitcost;
@property (strong, nonatomic) NSString* warehouse;
@end
Et ici le modèle d'inventaire
#import "JSONModel.h"
#import "InvLotModel.h"
@protocol InvModel @end
@interface InvModel : JSONModel
@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* itemid;
@property (strong, nonatomic) NSString* description;
@property (strong, nonatomic) NSDate* createdate;
@property (strong, nonatomic) NSString* createuser;
@property (assign, nonatomic) float lastcost;
@property (assign, nonatomic) BOOL monitorlevel;
@property (assign, nonatomic) int minlevel;
@property (assign, nonatomic) int maxlevel;
@property (strong, nonatomic) NSString* gtin;
@property (assign, nonatomic) float weight;
@property (strong, nonatomic) NSString* uom;
@property (strong, nonatomic) NSString* sizes;
@property (strong, nonatomic) NSString* variety;
@property (strong, nonatomic) NSString <Optional>* bag;
@property (strong, nonatomic) NSString* style;
@property (strong, nonatomic) NSString* box;
@property (strong, nonatomic) NSString* label;
@property (strong, nonatomic) NSString* commodity;
@property (strong, nonatomic) InvLotModel* LotDTO;
@end
La solution
Je vois deux problèmes :
1) Dans le InvModel
classe, tu as défini LotDTO
comme un objet unique, pas un tableau.
2) Dans la réponse JSON que vous avez publiée, la syntaxe de LotDTO
ne me semble pas valide JSON.Il semble qu'il s'agisse d'un ensemble de LotDTO
objets, mais il ne suit pas la syntaxe des tableaux JSON (que vous pouvez vérifier, par exemple, ici).
Autres conseils
Assurez-vous de marquer toute propriété d'extension comme Ignore
.J'ai rencontré un tel problème en essayant de copier le modèle.
Veuillez remplacer cette
@property (strong, nonatomic) InvLotModel* LotDTO;
avec cette
@property (strong, nonatomic) NSArray<InvLotModel,ConvertOnDemand>* LotDTO;
En tant que fonctionnaires de Jsonmodel suggérant d'utiliser Convertondemand pour convertir Nsarray en Jsonmodelarray dans l'un de leur tutoriel pour éviter toute erreur d'implanation.
Cela peut vous aider: Cliquez ici