0

Java用のGoogleアプリエンジンのアプリがあり、送信時にsigned_requestをアプリのサーブレットに送信するFacebookフォームがあります。次のコードを使用して、暗号化を解除し、json 文字列に変換しています

String signedRequest = (String) req.getParameter("signed_request");
        String payload = signedRequest.split("[.]", 2)[1];
        payload = payload.replace("-", "+").replace("_", "/").trim();
        String jsonString = new String(Base64.decodeBase64(payload.getBytes()));
        System.out.println("Json is::" + jsonString);

応答は次のようになります

[sakshumweb/3.361739372881481188].: Json is::{"algorithm":"HMAC-SHA256","expires":1347588000,"issued_at":1347584290,"oauth_token":"XXXXX","re​​gistration":{"name" :"Vik Ku​​mar","first_name":"Vik","last_name":"Kumar","bloodGroup":"B-","gender":"male","birthday":"10/31/1983" ,"email":"vik.ceo\u0040gmail.com","cellPhone":"1234123456","homePhone":"1234123457","officePhone":"1234123458","primaryAddress":"jdfjfgj","area" :"jfdjdfj","location":{"name":"カリフォルニア州レッドウッド ショアーズ","id":103107903062719},"subscribe":true,"eyePledge":false,"reference":"fgfgfgfg"}, "registration_metadata":{"fields":"[{\"name\":\"name\"},{\"name\ ":\"first_name\"},{\"name\":\"last_name\"}, {\"name\":\"bloodGroup\", \"description\":\"血液型\", \ "type\":\"select\", \"options\":{\"A+\":\"A+\",\"A-\":\"A-\",\"B+\": \"B+\",\"B-\":\"B-\",\"O+\":\"O+\",\"O-\":\"O-\",\"AB+\ ":\"AB+\",\"AB-\":\"AB-\",\"A1+\":\"A1+\",\"A1-\":\"A1-\",\" A2+\":\"A2+\",\"A2-\":\"A2-\",\"A1B+\":\"A1B+\",\"A1B-\":\"A1B-\",\"A2B+\":\"A2B+\",\"A2B-\": \"A2B-\",\"HH\":\"ボンベイ血液型\"}}, {\"名前\":\"性別\"}, {\"名前\":\"誕生日\"} ,{\"名前\":\"メール\"}, {\"名前\":\"携帯電話\", \"説明\":\"携帯電話番号\", \"タイプ\":\"テキスト\"}, {\"name\":\"homePhone\", \"description\":\"自宅の電話番号\", \"type\":\"text\"}, {\"name\": \"officePhone\", \"description\":\"Office Number\", \"type\":\"text\"}, {\"name\":\"primaryAddress\", \"description\" :\"Primary Address\", \"type\":\"text\"}, {\"name\":\"area\", \"description\":\"Locality/Village/Area\", \"type \":\"text\"},{\"name\":\"location\"}, {\"name\":\"subscribe\", \"description\":\"サクシュムを購読するActivites updates.\", \"type\":\"checkbox\", \"default\":\"checked\"}, {\"name\":\"eyePledge\", \"description\": \"私の目も誓います.\", \"type\":\"checkbox\"}, {\"name\":\"reference\", \"description\":\"どうやって私たちに連絡しました (友達、Facebook、Google など)?\", \"type\":\"text\"}]"},"user":{"country":"us","locale":"en_GB"},"user_id":"875390603"}

では、このデータを解析して、この応答の登録部分のデータを抽出するにはどうすればよいですか?

4

1 に答える 1

1

これは有効な JSONであるため、Jackson やGSONなどの JSON ライブラリを使用して解析できます。

次のコード例を使用して、すべてのregistrationフィールドを出力できます。

JsonNode json = new ObjectMapper().readTree(response);
JsonNode registration_fields = json.get("registration");

Iterator<String> fieldNames = registration_fields.getFieldNames();
while(fieldNames.hasNext()){
    String fieldName = fieldNames.next();
    String fieldValue = registration_fields.get(fieldName).asText();
    System.out.println(fieldName+" : "+fieldValue);
}
于 2012-09-14T06:49:39.840 に答える