0

以下のような括弧付きのフォーマットを見つけたいです。

「 {id: 」で始まり、 「 }」で終わる必要があり
、id 値は AZ です。それで全部です。

私は内側のブラケットにとても混乱しています...

以下はフォーマットのサンプルです。

 {
            id: "A",
            cid: "6331411109881515776",
            latlng: {
                lat: 37.492488999999999,
                lng: 127.014357
            },
            image: "http://maps.gstatic.com/intl/ko_kr/mapfiles/markers2/markerA.png",
            sprite: {
                width: 20,
                height: 34,
                top: 0,
                image: "http://maps.gstatic.com/mapfiles/markers2/red_markers_A_J2.png"
            },
            icon_id: "A",
            drg: true,
            laddr: "강남대성학원, 서울특별시 서초구 서초1동 1657-7",
            geocode: "CQISkUJWkUyzFQkXPAId1RWSByEAD3Pz27DdVym31_joa6F8NTEAD3Pz27DdVw",
            sxti: "강남대성학원",
            sxst: "서초1동",
            sxsn: "1657-7",
            sxct: "서울특별시",
            sxpr: "",
            sxpo: "137-071",
            sxcn: "KR",
            sxph: "+8225817217",
            name: "강남대성학원",
            ss: {
                edit: true,
                detailseditable: true,
                deleted: false,
                rapenabled: true,
                mmenabled: true
            },
            elms: [
                4,
                1,
                6,
                1,
                10,
                2,
                12,
                1,
                9,
                1,
                5,
                2,
                11
            ]
        },

助けてくれてありがとう~~

** * * 2012/07/19 編集* ** * *

私のコードは

NSError *error = nil;

NSString *urlString = [NSString stringWithFormat:@"http://maps.google.co.kr?q=%@&output=json", 
                       [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
//#define NSKoreanEncoding  0x80000422
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString] options:kNilOptions error:&error];
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSKoreanEncoding];

//remove the while(1); from data
dataString = [dataString substringFromIndex:9];

// Create SBJSON object to parse JSON
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSMutableDictionary *dict = [parser objectWithString:dataString error:&error];

NSLog(@"ERROR: %@", error);
NSLog(@"dict: %@", dict);
NSLog(@"dataString: %@",dataString);

//Samples can get result
NSString *jsonStr  = @"{\"name\":\"jia\",\"age\":\"24\"}";  
NSString *jsonStr2 = @"[\"1\",\"2\"]";  

SBJsonParser *jsonParser = [[SBJsonParser alloc] init];  

dict = [jsonParser objectWithString:jsonStr];  
NSLog(@"%@",dict);  

NSMutableArray *arr = [jsonParser objectWithString:jsonStr2];  
NSLog(@"%@",arr); 

本当のJSONオブジェクトは「キー」=「値」の形式なので、辞書には使えない・・・それに、形式を変える方法もある・・・

以下は、私のターゲットと同じ数行の Java コードです。

//remove while(1);
String jsonString = sb.toString().substring(9);

Log.d(TAG_SERVER, jsonString);
JSONObject jj = new JSONObject(jsonString);
//get "overlays" object
JSONObject overlays = jj.getJSONObject("overlays");
//get "markers" object
JSONArray markers = overlays.getJSONArray("markers");

私の目標は、マーカーを取得することです。それらには、Google マップの完全な検索結果が含まれています。

やり方わかる人いたら教えてください~~

4

1 に答える 1

3

正規表現はネストされた構造を単独で照合することはできず、再帰的な正規表現はめちゃくちゃです。

あなたができる最善のことは、適切な JSON パーサーを使用することです。多くのライブラリから選択できます。いくつかのリストについては、http://json.org/の下部を参照してください 。


例: ( TouchJSONを使用)

NSData *theJSONData = /* load your JSON data */

// Look for the opening '{'
const unsigned char *buf = [theJSONData bytes];
NSUInteger len = [theJSONData length];
if (len > 32) len = 32;
NSUInteger start;
for (start = 0; start < len; start++) {
    if (buf[start] == '{') break;
}
if (start == len) {
    NSLog(@"Could not find '{'");
}

// Cut off any prefix javascript ("while(1);")
if (start > 0) {
    len = [theJSONData length];
    theJSONData = [theJSONData subdataWithRange:NSMakeRange(start,len-start)];
}

NSError *theError = nil;
NSDictionary *theObject = [[CJSONDeserializer deserializer]
        deserializeAsDictionary:theJSONData
        error:&theError];

// Print the cid
NSLog(@"cid = %@", [theObject objectForKey:@"cid"]);

出力:

cid = 6331411109881515776
于 2012-07-18T12:20:36.417 に答える