jsonpath在Talend 5.5中使用正则表达式

时间:2014-07-16 14:47:51

标签: java regex json talend jsonpath

我有这个json字符串:

我想提取数字节点之后的所有ID:"0""1""2"等等。

我已经成功通过使用jsonpath获得了一个id:$.response.data.0.id并获得了"15124"。 但是我正在寻找一个能够提取Json String中所有id的jsonpath。 换句话说,这是被驱逐的输出:151241349814296133641406013672

这是我有的Json String:

{
"response": {
    "code": 200,
    "msg": "Success",
    "data": {
        "0": {
            "id": "15124",
            "name": " yoav (yoavshaki@yahoo.com) - 301519506662355",
            "network_id": 1,
            "network_type": "Facebook",
            "currency": "USD",
            "currency_info": {
                "prefix": "$",
                "postfix": "",
                "name": "US Dollars"
            },
            "timezone": {
                "id": 139,
                "code": "IST",
                "region": "Asia",
                "locality": "Jerusalem",
                "offset": 3,
                "facebook_code": 70
            }
        },
        "1": {
            "id": "13498",
            "name": "(Not in used) Daniel - 30138444",
            "network_id": 1,
            "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
            }
        },
        "2": {
            "id": "14296",
            "name": "Daniel - ComeOn (bingocafe@walla.com - 1375713835981039)",
            "network_id": 1,
            "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
            }
        },
        "3": {
            "id": "13364",
            "name": "Erez - 116060088528093",
            "network_id": 1,
            "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
            }
        },
        "4": {
            "id": "14060",
            "name": "Erez - NordicBet (gianniciano82@gmail.com - 105134566315107)",
            "network_id": 1,
            "network_type": "Facebook",
            "currency": "USD",
            "currency_info": {
                "prefix": "$",
                "postfix": "",
                "name": "US Dollars"
            },
            "timezone": {
                "id": 139,
                "code": "IST",
                "region": "Asia",
                "locality": "Jerusalem",
                "offset": 3,
                "facebook_code": 70
            }
        },
        "5": {
            "id": "13672",
            "name": "Erez - alon.dan - 1378526859026272",
            "network_id": 1,
            "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
            }
        }
    }
}
}

感谢所有帮助者!

2 个答案:

答案 0 :(得分:1)

GSON library是将java对象转换为json字符串的好选择,反之亦然。

以下是使用[Gson#fromJson()]将JSON字符串转换为java Map的示例代码。

Find more examples...

示例代码:

BufferedReader reader = new BufferedReader(new FileReader(new File("resources/json.txt")));
Gson gson = new Gson();
Type type = new TypeToken<Map<String, Map<String, Object>>>() {}.getType();
Map<String, Map<String, Object>> map = gson.fromJson(reader, type);

Map<String, Map<String, Object>> innerMap = (Map<String, Map<String, Object>>) map.get("response").get("data");
for (String key : innerMap.keySet()) {
    System.out.println("key:" + key + " id:" + innerMap.get(key).get("id"));
}

输出:

key:0 id:15124
key:1 id:13498
key:2 id:14296
key:3 id:13364
key:4 id:14060
key:5 id:13672

答案 1 :(得分:0)

感谢Syam S.的回答。

$.response.data.*.id确实有效!