2014-09-28 32 views
0

我有以下JSON字符串,我需要只提取ID場的名單和場, 對於IDS的預期結果將是:JsonPath字段提取,在Talend 5.5

{15124,10287,13766,13568...etc} 

而對於名字的預期輸出爲:

{" yoav ([email protected]) - 301519506662355","Inactive (ilan.dayan)","Inactive ([email protected])","Inactive (jonatan.silvester)"..etc} 

我嘗試這條道路:$.response.data.*.id,但我得到了我不需要的「時區」鍵內的ID列表。

這是JSON字符串:

{ "response": { 
    "code": 200, 
    "msg": "Success", 
    "data": [ 
    { 
     "id": 15124, 
     "name": " yoav ([email protected]) - 301519506662355", 
     "network_id": 301519506662355, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 139, 
     "code": "IST", 
     "region": "Asia", 
     "locality": "Jerusalem", 
     "offset": 2, 
     "facebook_code": 70 
     }, 
     "owner": { 
     "name": "Ido Levi", 
     "email": "[email protected]", 
     "network_id": 100004129233318, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 10287, 
     "name": "Inactive (ilan.dayan)", 
     "network_id": 111979298917521, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 139, 
     "code": "IST", 
     "region": "Asia", 
     "locality": "Jerusalem", 
     "offset": 2, 
     "facebook_code": 70 
     }, 
     "owner": { 
     "name": "Ilan Sloto", 
     "email": "[email protected]", 
     "network_id": 100003163553895, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 13766, 
     "name": "Inactive ([email protected])", 
     "network_id": 1405567046335275, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 139, 
     "code": "IST", 
     "region": "Asia", 
     "locality": "Jerusalem", 
     "offset": 2, 
     "facebook_code": 70 
     }, 
     "owner": { 
     "name": "Joel Peleh", 
     "email": "[email protected]", 
     "network_id": 100006459791435, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 13568, 
     "name": "Inactive (jonatan.silvester)", 
     "network_id": 125737960970262, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 92, 
     "code": "PST", 
     "region": "America", 
     "locality": "Los_Angeles", 
     "offset": -7, 
     "facebook_code": 1 
     }, 
     "owner": { 
     "name": "Jonatan Silvester", 
     "email": "[email protected]", 
     "network_id": 100006021764102, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 13472, 
     "name": "Inactive (markus.sogova)", 
     "network_id": 127771634098217, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 92, 
     "code": "PST", 
     "region": "America", 
     "locality": "Los_Angeles", 
     "offset": -7, 
     "facebook_code": 1 
     }, 
     "owner": { 
     "name": "Marcus Sogova", 
     "email": "[email protected]", 
     "network_id": 100005961429701, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 13052, 
     "name": "Inactive (matan.hamesh)", 
     "network_id": 110032855847424, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 139, 
     "code": "IST", 
     "region": "Asia", 
     "locality": "Jerusalem", 
     "offset": 2, 
     "facebook_code": 70 
     }, 
     "owner": { 
     "name": "", 
     "email": "[email protected]", 
     "network_id": 100005221303485, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 13010, 
     "name": "Inactive (matan.shmone)", 
     "network_id": 110145245840590, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 139, 
     "code": "IST", 
     "region": "Asia", 
     "locality": "Jerusalem", 
     "offset": 2, 
     "facebook_code": 70 
     }, 
     "owner": { 
     "name": "", 
     "email": "[email protected]", 
     "network_id": 100005353451967, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 13726, 
     "name": "Inactive ([email protected])", 
     "network_id": 1406755166207011, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 92, 
     "code": "PST", 
     "region": "America", 
     "locality": "Los_Angeles", 
     "offset": -7, 
     "facebook_code": 1 
     }, 
     "owner": { 
     "name": "Venita Vagt", 
     "email": "[email protected]", 
     "network_id": 100006176232384, 
     "network_type": "Facebook" 
     } 
    }, 
    { 
     "id": 15134, 
     "name": "yoav ([email protected]) - 1388742651379471", 
     "network_id": 1388742651379471, 
     "network_type": "Facebook", 
     "currency": "USD", 
     "currency_info": { 
     "prefix": "$", 
     "postfix": "", 
     "name": "US Dollars" 
     }, 
     "timezone": { 
     "id": 10, 
     "code": "CET", 
     "region": "Europe", 
     "locality": "Sofia", 
     "offset": 3, 
     "facebook_code": 19 
     }, 
     "owner": { 
     "name": "Zoltan Timov", 
     "email": "[email protected]", 
     "network_id": 100007312476197, 
     "network_type": "Facebook" 
     } 
    } 
    ] 
} } 

什麼jsonpath模式應該我送?

回答

0

隨着$.response.data.*.id模式,你請求數據節點其中將包括時區 ID下的所有*身份證* S。

使用將是$.response.data.[*].id$.response.data.[*].name,正確的圖案即選擇所有ID名稱)值,其是數據節點的直接兄弟姐妹。

下面的代碼片斷將說明的情況下:

public class ResponseService 
{ 
    public static void main(String[] args) 
    { 
    final String OPENING_CURLY = "{"; 
    final String CLOSING_CURLY = "}"; 
    final String COLON = ","; 
    final String QUOTE = "\""; 

    String jsonData; // Load you response json feed. 
    List<Object> ids = JsonPath.read(jsonData, "$.response.data[*].id"); 
    StringBuilder formattedIds = new StringBuilder(OPENING_CURLY); 
    for (Iterator it = ids.iterator(); it.hasNext();) 
    { 
     formattedIds.append(it.next()); 
     if (it.hasNext()) 
     { 
     formattedIds.append(COLON); 
     } 
    } 
    formattedIds.append(CLOSING_CURLY); 
    System.out.println(formattedIds); 

    List<Object> names = JsonPath.read(jsonData, "$.response.data[*].name"); 
    StringBuilder formattedNames = new StringBuilder(OPENING_CURLY); 
    for (Iterator it = names.iterator(); it.hasNext();) 
    { 
     formattedNames.append(QUOTE) 
     .append(it.next()) 
     .append(QUOTE); 
     if (it.hasNext()) 
     { 
     formattedNames.append(COLON); 
     } 
    } 
    formattedNames.append(CLOSING_CURLY); 
    System.out.println(formattedNames); 
    } 
} 

上面的代碼將導致下面的輸出:

{15124,10287,13766,13568,13472,13052,13010,13726,15134} 
{" yoav ([email protected]) - 301519506662355","Inactive (ilan.dayan)","Inactive ([email protected])","Inactive (jonatan.silvester)","Inactive (markus.sogova)","Inactive (matan.hamesh)","Inactive (matan.shmone)","Inactive ([email protected])","yoav ([email protected]) - 1388742651379471"} 
0
簡單

方式使用json.org

String str ="yourJsonString"; 
List<String> listOfIds = new ArrayList<String>(); 
JSONObject jsonObject =new JSONObject(str); 
String jsonStr = jsonObject.get("response").toString(); 
JSONObject jsonObj =new JSONObject(jsonStr); 
String jsonS = jsonObj.get("data").toString(); 
JSONArray jsonArray = new JSONArray(jsonS); 
for(int i =0;i<jsonArray.length();i++){ 
    JSONObject object = new JSONObject(jsonArray.get(i).toString()); 
    listOfIds.add(object.get("id").toString()); 
} 
System.out.println(listOfIds);