2016-10-25 2 views
0

Hallo, ich habe 2 JSON Strings wie folgt.JSON Zeichenfolge geben NULL nach Deserialisierung iOS

erstes Objekt

{ 
    "LeaveEntryCode":0, 
    "RequestId":0, 
    "EmployeeCode":17186, 
    "LeaveYear":2016, 
    "LeaveTypeCode":1, 
    "LeaveReasonCode":0, 
    "BaseType":"ess", 
    "StartDate":"2016-10-24T00:00:00", 
    "EndDate":"2016-10-24T00:00:00", 
    "NoOfDays":1.0, 
    "StartDateSession":"full", 
    "EndDateSession":"full", 
    "PreApproved":false, 
    "ForDate":"1901-01-01T00:00:00", 
    "Remarks":"test from Android", 
    "CoveringPersonCode":0, 
    "AttachedDocument":"[{\"DocumentId\":354,\"DocumentName\":\"Screenshot_2016-04-15-00-35-11.png\",\"DocumentType\":\"image/png\"}]", 
    "RequestStatus":"P", 
    "Deleted":false, 
    "Status":false, 
    "CreatedBy":0, 
    "CreatedDate":"0001-01-01T00:00:00", 
    "UpdatedBy":0, 
    "UpdatedDate":"0001-01-01T00:00:00", 
    "DeletedBy":0, 
    "DeletedDate":"0001-01-01T00:00:00", 
    "ModuleId":2, 
    "ObjectId":20, 
    "StartDateString":"10/24/2016", 
    "EndDateString":"10/24/2016", 
    "LeaveDayList":[ 
     "10/24/2016-FH,10/24/2016-SH" 
    ], 
    "SystemLeaveTypeCode":"ANN", 
    "LeaveTypeName":"ANNUAL", 
    "Employee":null, 
    "LieuDayList":null, 
    "BaseLeaveType":"ANN", 
    "CoveringPersonName":null, 
    "LeaveReasonName":"test", 
    "DocumentSource":"LEAVE" 
} 

zweites Objekt

{ 
    "LeaveEntryCode":0, 
    "RequestId":0, 
    "EmployeeCode":17227, 
    "LeaveYear":2016, 
    "LeaveTypeCode":1, 
    "LeaveReasonCode":3, 
    "BaseType":"ess", 
    "StartDate":"2016-10-26T00:00:00", 
    "EndDate":"2016-10-27T00:00:00", 
    "NoOfDays":2.0, 
    "StartDateSession":"full", 
    "EndDateSession":"half", 
    "PreApproved":false, 
    "ForDate":"1901-01-01T00:00:00", 
    "Remarks":"Test attachments in things to do", 
    "CoveringPersonCode":0, 
    "AttachedDocument":null, 
    "RequestStatus":"P", 
    "Deleted":false, 
    "Status":false, 
    "CreatedBy":0, 
    "CreatedDate":"0001-01-01T00:00:00", 
    "UpdatedBy":0, 
    "UpdatedDate":"0001-01-01T00:00:00", 
    "DeletedBy":0, 
    "DeletedDate":"0001-01-01T00:00:00", 
    "ModuleId":2, 
    "ObjectId":20, 
    "StartDateString":"10/26/2016", 
    "EndDateString":"10/27/2016", 
    "LeaveDayList":[ 
     "10/26/2016-FH,10/26/2016-SH,10/27/2016-FH,10/27/2016-SH" 
    ], 
    "SystemLeaveTypeCode":"ANN", 
    "LeaveTypeName":"ANNUAL", 
    "Employee":null, 
    "LieuDayList":null, 
    "BaseLeaveType":"ANN", 
    "CoveringPersonName":"", 
    "LeaveReasonName":"test", 
    "DocumentSource":"LEAVE", 
    "AttachedDocument":"[{\"DocumentId\":352,\"DocumentName\":\"IMG_2322.JPG\",\"DocumentType\":\"JPG\"}]" 
} 

Ich mag den AttachedDocument Wert in ein Array erhalten. Also habe ich das gefallen.

NSError *jsonError; 
NSData *objectData = [[[[dm.mutArraySelectedReq objectAtIndex:index] objectForKey:@"RequestDetails"] valueForKey:@"RequestForm"] dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData 
                options:0 
                 error:&jsonError]; 

if (json!=NULL) {//AttachedDocument 
    NSString *str=[json valueForKey:@"AttachedDocument"]; 
    NSData *data2=[str dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *json2 = [NSJSONSerialization JSONObjectWithData:data2 
                 options:0 
                  error:&jsonError]; 
    if (json2!=NULL) { 
     NSArray *arrayAttached=[NSArray arrayWithObject:json2]; 
     dm.mutArrayAttachedDocs=[[NSMutableArray alloc] initWithArray:arrayAttached]; 
    } 


} 

Mein erstes Objekt gibt mir den richtigen Wert für str Variable. Aber zweites Objekt gibt mir für AttachedDocument Wert

ich setzen bin nur den Schlüsselwert des AttachedDocument

ersten Objekts

"AttachedDocument": "[ 
{ 
\"DocumentId\":354, 
\"DocumentName\":\"Screenshot_2016-04-15-00-35-11.png\", 
\"DocumentType\":\"image/png\" 
} 
]" 

zweiten Objekts

"AttachedDocument":"[ 
{ 
\"DocumentId\":352, 
\"DocumentName\":\"IMG_2322.JPG\", 
\"DocumentType\":\"JPG\" 
} 
]" 

Können Sie Bitte erkläre mir, was ist die Differenz (eher th ein Bild/PNG und JPG). Warum mein zweites Objekt mir null gibt für AttachedDocument Bitte helfen Sie mir. Danke

+0

Formatieren Sie Ihre JSON-Samples in verschiedene Zeilen, damit Sie ihre Struktur besser sehen können. –

+0

FYI - Verwenden Sie nicht 'valueForKey:', um ein Objekt von einem 'NSDictionary' zu erhalten. Verwenden Sie 'objectForKey:', es sei denn, Sie haben eine bestimmte und klar verstandene Notwendigkeit, die Schlüsselwertcodierung zu verwenden. – rmaddy

+0

@rmaddyI verwendet Objekt für Schlüssel, um meine str zu bekommen, aber ich bekomme diesen Fehler *** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [NSNull dataUsingEncoding:]: nicht erkannt Selektor an Instanz gesendet – Irrd

Antwort

0

Ja 1. Objekt ist gültiges JSON-Format. Aber

wenn wir überprüfen Sie die 2 Objekt

{ 
    "LeaveEntryCode": 0, 
    "RequestId": 0, 
    "EmployeeCode": 17227, 
    "LeaveYear": 2016, 
    "LeaveTypeCode": 1, 
    "LeaveReasonCode": 3, 
    "BaseType": "ess", 
    "StartDate": "2016-10-26T00:00:00", 
    "EndDate": "2016-10-27T00:00:00", 
    "NoOfDays": 2.0, 
    "StartDateSession": "full", 
    "EndDateSession": "half", 
    "PreApproved": false, 
    "ForDate": "1901-01-01T00:00:00", 
    "Remarks": "Test attachments in things to do", 
    "CoveringPersonCode": 0, 

"AttachedDocument": null,

"RequestStatus": "P", 
    "Deleted": false, 
    "Status": false, 
    "CreatedBy": 0, 
    "CreatedDate": "0001-01-01T00:00:00", 
    "UpdatedBy": 0, 
    "UpdatedDate": "0001-01-01T00:00:00", 
    "DeletedBy": 0, 
    "DeletedDate": "0001-01-01T00:00:00", 
    "ModuleId": 2, 
    "ObjectId": 20, 
    "StartDateString": "10/26/2016", 
    "EndDateString": "10/27/2016", 
    "LeaveDayList": [ 
     "10/26/2016-FH,10/26/2016-SH,10/27/2016-FH,10/27/2016-SH" 
    ], 
    "SystemLeaveTypeCode": "ANN", 
    "LeaveTypeName": "ANNUAL", 
    "Employee": null, 
    "LieuDayList": null, 
    "BaseLeaveType": "ANN", 
    "CoveringPersonName": "", 
    "LeaveReasonName": "test", 
    "DocumentSource": "LEAVE", 

"AttachedDocument": "[{\" DocumentId \“ : 352, "DocumentName": "IMG_2322.JPG", "DocumentType": "JPG"}] "

} 

Zwei JSON-Objekte haben die gleichen Deshalb zweites Objekt NULL-Wert geben, wenn deserialisieren es .

Verwandte Themen