كيفية الكشف عن كائن جسون / جسون صفيف على كسكودي باستخدام جسون الإطار

StackOverflow https://stackoverflow.com/questions/3276804

  •  17-09-2020
  •  | 
  •  

سؤال

لدي بعض المشاكل مع تحليل جسون.عندما ضرب ورل ، لقد حصلت على استجابة جسون مثل هذا:

//JSON 1
{ "data":
  {"array":
    ["3",
       {"array":
          [
            {"id":"1","message":"Hello","sender":"inot"},
            {"id":"2","message":"World","sender":"inot"},
            {"id":"3","message":"Hi","sender":"marza"}
          ]
        }
     ]
   },
 "message":"MSG0001:Success",
 "status":"OK"
}

ولكن إذا كانت نتيجة البيانات هي 1 فقط ، فإن استجابة جسون هي مثل هذا:

//JSON 2
{ "data":
  {"array":
    ["3",
       {"array":
          {"id":"3","message":"Hi","sender":"marza"}
       }
     ]
   },
 "message":"MSG0001:Success",
 "status":"OK"
}

أنا تنفيذ هذا الرمز للحصول على معرف ، رسالة وقيمة المرسل ، وتعمل بشكل جيد على جسون 1 ، ولكن خطأ على جسون 2.يمكنني استخدام جسون الإطار.والسؤال هو كيفية الكشف عن أن استجابة جسون هو كائن ({ }) أو مجموعة ([])??

// Parse the string into JSON
NSDictionary *json = [myString JSONValue];

// Get all object
NSArray *items = [json valueForKeyPath:@"data.array"];
NSArray *array1 = [[items objectAtIndex:1] objectForKey:@"array"];
NSEnumerator *enumerator = [array1 objectEnumerator];
NSDictionary* item;
while (item = (NSDictionary*)[enumerator nextObject]) {
   NSLog(@"id      = %@",[item objectForKey:@"id"]);
   NSLog(@"message = %@",[item objectForKey:@"message"]);
   NSLog(@"sender  = %@",[item objectForKey:@"sender"]);
}
هل كانت مفيدة؟

المحلول

يمكنك استخدام id وتحقق مما إذا كان الكائن الذي تحصل عليه هو نساراي أو نسديكتيوناري مثل هذا:

id item = [json valueForKeyPath:@"data.array"];
if ([item isKindOfClass:[NSArray class]]) {
    // item is an array
}
else if ([item isKindOfClass:[NSDictionary class]]) {
    // item is a dictionary
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top