0

こんにちは私はIOSでjsonを解析するのに問題があります。これはjsonデータです。

{
"app_info": [
    {
        "app_name": "haka",
        "sync_protocol_version": "1"
    }
],
"updates": [
    {
        "timestamp": "Sat Apr 21 13:04:08 IST 2012",
        "people": [
            {
                "personal_info": [
                    {
                        "first_name": "phlox",
                        "last_name": "",
                        "employee_id": "010",
                        "gender": "-",
                        "marital_status": "-",
                        "nationality": "Denobulan",
                        "dob": "re-23",
                        "photo": "http://c.cc/users/010/profile/image"
                    }
                ],
                "contact_details": [
                    {
                        "address": [
                            {
                                "street": "#1, this way",
                                "city": "tank",
                                "state": "sick bay",
                                "zip": "0978",
                                "country": "Enterprise"
                            }
                        ],
                        "telephone": [
                            {
                                "work": "010",
                                "mobile": "010",
                                "home": "010"
                            }
                        ],
                        "email": [
                            {
                                "work": "phlox@nx-10.ent",
                                "personal": ""
                            }
                        ]
                    }
                ],
                "emergency": [
                    {
                        "contact": [
                            {
                                "name": "-",
                                "relationship": "",
                                "telephone": [
                                    {
                                        "work": "",
                                        "home": "",
                                        "mobile": ""
                                    }
                                ]
                            }
                        ],
                        "blood_group": ""
                    }
                ],
                "categorization": [
                    {
                        "designation": "",
                        "department": "",
                        "location": "",
                        "joining_date": ""
                    }
                ]
            },
            {
                "personal_info": [
                    {
                        "first_name": "",
                        "last_name": "",
                        "employee_id": "",
                        "gender": "",
                        "marital_status": "",
                        "nationality": "",
                        "dob": "",
                        "photo": ""
                    }
                ],
                "contact_details": [
                    {
                        "address": [
                            {
                                "street": "",
                                "city": "",
                                "state": "",
                                "zip": "",
                                "country": ""
                            }
                        ],
                        "telephone": [
                            {
                                "work": "",
                                "mobile": "",
                                "home": ""
                            }
                        ],
                        "email": [
                            {
                                "work": "",
                                "personal": ""
                            }
                        ]
                    }
                ],
                "emergency": [
                    {
                        "contact": [
                            {
                                "name": "",
                                "relationship": "",
                                "telephone": [
                                    {
                                        "work": "",
                                        "home": "",
                                        "mobile": ""
                                    }
                                ]
                            }
                        ],
                        "blood_group": ""
                    }
                ],
                "categorization": [
                    {
                        "designation": "",
                        "department": "",
                        "location": "",
                        "joining_date": ""
                    }
                ]
            }
        ],
        "messages": [
            {
                "sender": "Archer<admin@nx-10.ent>",
                "sender_role": "admin",
                "message_type": "broadcast",
                "message": "parking space up for grabs",
                "message_recipients": "all",
                "reply_permitted": "0"
            }
        ],
        "events": [
            {
                "creator": "Travis<ensign@nx-01.ent>",
                "event_title": "",
                "event_description": "",
                "event_time_start": "",
                "event_time_end": "",
                "location": "",
                "invitees": [
                    {
                        "id": "020",
                        "acceptance": "1"
                    }
                ]
            }
        ],
        "settings": [
            {
                "sync_frequency": "0"
            }
        ]
    }
]}

これは有効なjson形式です。http://jsonlint.com/http://braincast.nl/samples/jsoneditor/を使用して確認しました

json値の構造を参照してください。構造によると、peopleタグは2つのオブジェクトを持っているため、カウント2を返す必要がありますが、解析中に返されるのは1つだけです。私は完全に選択肢がありません。みんなを助けてください。

これは私が解析に使用しているコードです

NSString *textPAth = [[NSBundle mainBundle] pathForResource:@"sync" ofType:@"json"];
NSError *error;
NSString *content = [NSString stringWithContentsOfFile:textPAth encoding:NSUTF8StringEncoding error:&error];    
NSArray *jsonArray = [[content JSONValue] retain]; 
NSLog(@"JSON ARRAY   %@   AND COUNT  %d",[[jsonArray valueForKey:@"updates"] valueForKey:@"people"],[[[jsonArray valueForKey:@"updates"] valueForKey:@"people"]  count]);
4

2 に答える 2

2

エントリが1つしかない場合(不要)、すべての辞書が配列でラップされている理由はわかりませんが、解析したい場合は、次のようなものが必要です:

NSDictionary *jsonDict = [[content JSONValue] retain];
NSArray *updatesArray = [jsonDict objectForKey:@"updates"];
NSDictionary *updatesDict = [updatesArray objectAtIndex:0];
NSArray *peopleArray = [updatesDict objectForKey:@"people"];
NSLog(@"People count: %i", [peopleArray count]);
for (NSDictionary *peopleDict in peopleArray) {
    //do something
}

補足として、これが JSON の場合、実際には配列ではないエントリの [arrays] を削除する必要があります。それを解析することはできますが、最初に配列を読み取ってから objectAtIndex:0 から辞書を取得する必要があることを意味します。これはまったく非効率的で無意味です。

于 2012-05-02T21:04:16.423 に答える
0

すべてのオブジェクトが配列にラップされており、予期しない結果が生じている可能性はありますか?

于 2012-05-02T21:01:53.990 に答える