0

これは、辞書に使用しているJSONファイルです。

{

    "Reports": {
        "Title of sheet": {
            "id": "1",
            "active": "0",
            "title": "Title of sheet",
            "date": "October 22, 2012",
            "description": "description",
            "ext": "DOCX",
            "fortest": "Tuesday, October 23",
            "subject": "Budget",
            "author": "xxxxxxxxxx",
            "email": "xxxxx@gmail.com"
        }
    }
}

これは、これを辞書に変換するために使用しているコードです(リクエストを実行した後)

self.tableDataSource = [NSMutableArray array];

 for (NSString *key in object.allKeys) // object is your root NSDictionary
    {
        NSDictionary *subDict = [object valueForKey:key];
        //create a new dictionary with two values - one for the key and one for the value.
        NSMutableDictionary *newDict = [NSMutableDictionary dictionary];
        [newDict setValue:subDict forKey:@"value"];
        [newDict setValue:key forKey:@"key"];
        [self.tableDataSource addObject:newDict];
    }

これにより、次の出力が生成されます。

(
        {
        key = Reports;
        value =         {
            "Sheet Title" =             {
                    active = 0;
                    author = "xxx xxxxxx";
                    date = "October 22, 2012";
                    description = "Description";
                    dl = "9 downloads";
                    email = "xxxxxxx@gmail.com";
                    ext = DOCX;
                    fortest= "Tuesday, October 23";
                    id = 1;
                    subject = Budget;
                    title = "Sheet title";
            };
        };
    }
)

これが私の質問です...レポート(キー)と値で行ったように、「シートのタイトル」をinfo =に変更するにはどうすればよいですか?レポート配列には、さらに多くのエントリが含まれ、すべてのエントリの横に異なる「シートのタイトル」配列が含まれます。私は具体的にしたくなく、名前で配列を呼び出します。なぜなら、jsonには常に配列が追加されるからです。助けてください、ありがとう!

PS私はforループをいじってみましたが、役に立ちませんでした...


編集:私はこのようなものが欲しい:

(
        {
        key = Reports;
        value =         {
            info =             {
                active = 0;
                author = "xxx xxxxxx";
                date = "October 22, 2012";
                description = "Description";
                dl = "9 downloads";
                email = "xxxxxxx@gmail.com";
                ext = DOCX;
                fortest = "Tuesday, October 23";
                id = 1;
                subject = Budget;
                title = "Sheet title";
            };
        };
    }
)

編集2:

とった!私はついにかなり創造的な解決策を通して答えを見つけました。私は基本的にNSDictionaryをNSArrayに変換し、それが理にかなっている場合は2つを切り替えていました...家に帰ったらコードを投稿します

4

1 に答える 1

1

あなたの問題についての私の理解に基づいてsubDict = [NSDictionary dictionaryWithObject:[subDict valueForKey:[[subDict allKeys] objectAtIndex:0]] forKey:@"info"];、メソッドに追加します。行の後に追加するだけですNSDictionary *subDict = [object valueForKey:key];

例:-

 self.tableDataSource = [NSMutableArray array];

 for (NSString *key in object.allKeys) // object is your root NSDictionary
    {
        NSDictionary *subDict = [object valueForKey:key];
        subDict = [NSDictionary dictionaryWithObject:[subDict valueForKey:[[subDict allKeys] objectAtIndex:0]] forKey:@"info"];
        //create a new dictionary with two values - one for the key and one for the value.
        NSMutableDictionary *newDict = [NSMutableDictionary dictionary];
        [newDict setValue:subDict forKey:@"value"];
        [newDict setValue:key forKey:@"key"];
        [self.tableDataSource addObject:newDict];
    }

印刷する必要があります、

(
        {
        key = Reports;
        value =         {
            info =             {
                active = 0;
                author = "xxx xxxxxx";
                date = "October 22, 2012";
                description = "Description";
                dl = "9 downloads";
                email = "xxxxxxx@gmail.com";
                ext = DOCX;
                fortest = "Tuesday, October 23";
                id = 1;
                subject = Budget;
                title = "Sheet title";
            };
        };
    }
)

更新: 以下のコメントに従って、subDict = [NSDictionary dictionaryWithObject:[subDict valueForKey:[[subDict allKeys] objectAtIndex:i]] forKey:@"info"];すべてのサブ配列を取得するには、別のループで使用する必要があります。要件に応じてこの行を変更します。

于 2012-11-14T03:47:32.383 に答える