0

私のアプリケーションはNSMutableData *receivedData.

NSJSONSerialization を使用してこれを解析することを選択したのは、それが最も簡単であるという前提の下です。私はそれを行う方法を理解するのに非常に苦労しています。私は、Java のバックグラウンドから、Objective-C を初めて使用します。

Java では、gson を使用して JSON を解析し、簡単に使用できる配列にしました。私はここでこれに本当に苦労しています。

JSONを解析するための私の現在のコードは次のとおりです。

NSError *e = nil;
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];

    if (!jsonArray) {
        NSLog(@"Error parsing JSON: %@", e);
    } else {
        for(NSDictionary *item in jsonArray) {
            NSLog(@"Item: %@", item);
        }
    }

インターネット上の誰かによって提供されたように。これは機能し、2 つの項目を NSLog に出力します。resultheader。JSON は次のようになります。

{
  "header":{
    "session":"sessionid",
    "serviceVersion":"1",
    "prefetchEnabled":true
  },
  "result":"50ce82401e826"
}

ただし、エラーがある場合、JSON は次のようになります。

{
  "header":{
    "session":"sessionid",
    "serviceVersion":"1",
    "prefetchEnabled":true
  },
  "fault":{
    "code":0,
    "message":"someErrorCode"
  }
}

コードをどのように機能させたいか:

  1. 「障害」オブジェクトがあるかどうかを確認する
  2. ある場合は、fault.code と fault.message を NSLog に出力します。
  3. 存在しない場合、JSON にフォールトではなく結果が含まれていることがわかります
  4. 結果の値を NSLog に出力します

しかし、私は一生、それにアプローチする方法を理解することはできません。誰かが私にいくつかの指針を教えてもらえますか?

4

1 に答える 1

0

あなたのオブジェクトは辞書のようです。

これを試してみてください。

NSError *e = nil;
id jsonObj = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];

NSArray *jsonArray = nil;
NSDictionary *jsonDict = nil;

if ([jsonObj isKindOfClass:[NSArray class]]){
    jsonArray = (NSArray*)jsonObj;
}
else if ([jsonObj isKindOfClass:[NSDictionary class]]){
    jsonDict = (NSDictionary*)jsonObj;
}

if (jsonArray != nil) {
    // you have an array;
    for(NSDictionary *item in jsonArray) {
        NSLog(@"Item: %@", item);
    }
}
else if (jsonDict != nil){
    for (NSString *key in jsonDict.allKeys){
        NSLog(@"Key: %@ forItem: %@",key,[jsonDict valueForKey:key]);
    }
}
else {
    NSLog(@"Error: %@",e);
}
于 2012-12-17T18:15:34.503 に答える