Search code examples
javajsonarraylisttalendjsonpath

reading jsonpath into arraylist in Talend


I'm using Talend 5.5. I have this ArrayList (segments_id) that should be filled by the JSON feed:

List <Integer> segments_id = Jsonpath.read(row11.Body,"$.response.data.*.segment_id")

The list segments_id should hold all the values of the fields "segment_id" from the JSON object (row11.Body):

(25226676,25226672,25226668)

But the list is empty... What is the problem in my json path??

row11.Body holds below response:

{
    "response": {
        "code": 200,
        "msg": "Success",
        "data": [
            {
                "segment_id": 25226676,
                "segment_name": "01-N-Roulette(05)-FI",
                "type": "advert",
                "metric": {
                    "cpm": "$19.50",
                    "unique_cpm": "$19.58",
                    "cpc": "$2.82",
                    "unique_cpc": "$3.53",
                    "cpa": "$0.00",
                    "unique_cpa": "$0.00",
                    "impressions": "723",
                    "unique_impressions": "720",
                    "clicks": "5",
                    "unique_clicks": "4",
                    "conversions": "0",
                    "unique_conversions": "0",
                    "ctr": "0.692%",
                    "unique_ctr": "0.556%",
                    "conversion_rate": "0.00%",
                    "unique_conversion_rate": "0.00%",
                    "spend": "$14.10",
                    "revenue": "$14.10",
                    "margin": "$0.00",
                    "percentage_margin": "0.00%",
                    "frequency": "1.0",
                    "social_impressions": "82",
                    "unique_social_impressions": "0",
                    "social_clicks": "0",
                    "unique_social_clicks": "0",
                    "social_ctr": "0.000%",
                    "unique_social_ctr": "0.000%",
                    "social_spend": "$3.46",
                    "social_impressions_rate": "11.342%",
                    "social_clicks_rate": "0.00%",
                    "social_spend_rate": "24.54%",
                    "conversions_1": "0",
                    "unique_conversions_1": "0",
                    "conversions_rate_1": "0.000%",
                    "conversion_revenue_1": "$0.00",
                    "cost_per_conversion_1": "$0.00",
                    "conversions_2": "0",
                    "unique_conversions_2": "0",
                    "conversions_rate_2": "0.000%",
                    "conversion_revenue_2": "$0.00",
                    "cost_per_conversion_2": "$0.00",
                    "conversions_3": "0",
                    "unique_conversions_3": "0",
                    "conversions_rate_3": "0.000%",
                    "conversion_revenue_3": "$0.00",
                    "cost_per_conversion_3": "$0.00",
                    "facebook_connections": "0",
                    "facebook_connections_rate": "0.000%",
                    "cost_per_facebook_connection": "$0.00",
                    "post_impression_conversions": "0",
                    "post_impression_conversion_1": "0",
                    "post_impression_conversion_2": "0",
                    "post_impression_conversion_3": "0",
                    "actions": "5",
                    "action_rate": "0.692%",
                    "cost_per_action": "$2.82",
                    "client_cpm": "$19.50",
                    "client_cpc": "$2.82",
                    "client_cpa": "$0.00",
                    "client_spend": "$14.10",
                    "shares": "0",
                    "u_shares": "0",
                    "share_rate": "0.000%",
                    "referrals": "0",
                    "u_referrals": "0",
                    "referrals_per_share": "0.000",
                    "newsfeed_impressions": "723",
                    "newsfeed_clicks": "5",
                    "newsfeed_average_positioning": "15.590",
                    "newsfeed_ctr": "0.007%",
                    "influenced_conversions": "0",
                    "influenced_conversion_rate": "0.000%",
                    "cost_per_influenced_conversion": "$0.00"
                }
            },
            {
                "segment_id": 25226672,
                "segment_name": "01-N-FiI+NO+DEslots(03)-FI",
                "type": "advert",
                "metric": {
                    "cpm": "$16.96",
                    "unique_cpm": "$17.00",
                    "cpc": "$2.70",
                    "unique_cpc": "$3.38",
                    "cpa": "$0.00",
                    "unique_cpa": "$0.00",
                    "impressions": "1,592",
                    "unique_impressions": "1,588",
                    "clicks": "10",
                    "unique_clicks": "8",
                    "conversions": "0",
                    "unique_conversions": "0",
                    "ctr": "0.628%",
                    "unique_ctr": "0.504%",
                    "conversion_rate": "0.00%",
                    "unique_conversion_rate": "0.00%",
                    "spend": "$27.00",
                    "revenue": "$27.00",
                    "margin": "$0.00",
                    "percentage_margin": "0.00%",
                    "frequency": "1.0",
                    "social_impressions": "234",
                    "unique_social_impressions": "0",
                    "social_clicks": "0",
                    "unique_social_clicks": "0",
                    "social_ctr": "0.000%",
                    "unique_social_ctr": "0.000%",
                    "social_spend": "$3.95",
                    "social_impressions_rate": "14.698%",
                    "social_clicks_rate": "0.00%",
                    "social_spend_rate": "14.63%",
                    "conversions_1": "0",
                    "unique_conversions_1": "0",
                    "conversions_rate_1": "0.000%",
                    "conversion_revenue_1": "$0.00",
                    "cost_per_conversion_1": "$0.00",
                    "conversions_2": "0",
                    "unique_conversions_2": "0",
                    "conversions_rate_2": "0.000%",
                    "conversion_revenue_2": "$0.00",
                    "cost_per_conversion_2": "$0.00",
                    "conversions_3": "0",
                    "unique_conversions_3": "0",
                    "conversions_rate_3": "0.000%",
                    "conversion_revenue_3": "$0.00",
                    "cost_per_conversion_3": "$0.00",
                    "facebook_connections": "0",
                    "facebook_connections_rate": "0.000%",
                    "cost_per_facebook_connection": "$0.00",
                    "post_impression_conversions": "0",
                    "post_impression_conversion_1": "0",
                    "post_impression_conversion_2": "0",
                    "post_impression_conversion_3": "0",
                    "actions": "9",
                    "action_rate": "0.565%",
                    "cost_per_action": "$3.00",
                    "client_cpm": "$16.96",
                    "client_cpc": "$2.70",
                    "client_cpa": "$0.00",
                    "client_spend": "$27.00",
                    "shares": "0",
                    "u_shares": "0",
                    "share_rate": "0.000%",
                    "referrals": "0",
                    "u_referrals": "0",
                    "referrals_per_share": "0.000",
                    "newsfeed_impressions": "1,592",
                    "newsfeed_clicks": "10",
                    "newsfeed_average_positioning": "13.280",
                    "newsfeed_ctr": "0.006%",
                    "influenced_conversions": "0",
                    "influenced_conversion_rate": "0.000%",
                    "cost_per_influenced_conversion": "$0.00"
                }
            },
            {
                "segment_id": 25226668,
                "segment_name": "01-N-LottoJackpot(01)-FI",
                "type": "advert",
                "metric": {
                    "cpm": "$14.36",
                    "unique_cpm": "$14.42",
                    "cpc": "$2.20",
                    "unique_cpc": "$4.71",
                    "cpa": "$0.00",
                    "unique_cpa": "$0.00",
                    "impressions": "2,298",
                    "unique_impressions": "2,289",
                    "clicks": "15",
                    "unique_clicks": "7",
                    "conversions": "0",
                    "unique_conversions": "0",
                    "ctr": "0.653%",
                    "unique_ctr": "0.306%",
                    "conversion_rate": "0.00%",
                    "unique_conversion_rate": "0.00%",
                    "spend": "$33.00",
                    "revenue": "$33.00",
                    "margin": "$0.00",
                    "percentage_margin": "0.00%",
                    "frequency": "1.0",
                    "social_impressions": "310",
                    "unique_social_impressions": "0",
                    "social_clicks": "0",
                    "unique_social_clicks": "0",
                    "social_ctr": "0.000%",
                    "unique_social_ctr": "0.000%",
                    "social_spend": "$5.34",
                    "social_impressions_rate": "13.490%",
                    "social_clicks_rate": "0.00%",
                    "social_spend_rate": "16.18%",
                    "conversions_1": "0",
                    "unique_conversions_1": "0",
                    "conversions_rate_1": "0.000%",
                    "conversion_revenue_1": "$0.00",
                    "cost_per_conversion_1": "$0.00",
                    "conversions_2": "0",
                    "unique_conversions_2": "0",
                    "conversions_rate_2": "0.000%",
                    "conversion_revenue_2": "$0.00",
                    "cost_per_conversion_2": "$0.00",
                    "conversions_3": "0",
                    "unique_conversions_3": "0",
                    "conversions_rate_3": "0.000%",
                    "conversion_revenue_3": "$0.00",
                    "cost_per_conversion_3": "$0.00",
                    "facebook_connections": "0",
                    "facebook_connections_rate": "0.000%",
                    "cost_per_facebook_connection": "$0.00",
                    "post_impression_conversions": "0",
                    "post_impression_conversion_1": "0",
                    "post_impression_conversion_2": "0",
                    "post_impression_conversion_3": "0",
                    "actions": "12",
                    "action_rate": "0.522%",
                    "cost_per_action": "$2.75",
                    "client_cpm": "$14.36",
                    "client_cpc": "$2.20",
                    "client_cpa": "$0.00",
                    "client_spend": "$33.00",
                    "shares": "0",
                    "u_shares": "0",
                    "share_rate": "0.000%",
                    "referrals": "0",
                    "u_referrals": "0",
                    "referrals_per_share": "0.000",
                    "newsfeed_impressions": "2,298",
                    "newsfeed_clicks": "15",
                    "newsfeed_average_positioning": "13.880",
                    "newsfeed_ctr": "0.007%",
                    "influenced_conversions": "0",
                    "influenced_conversion_rate": "0.000%",
                    "cost_per_influenced_conversion": "$0.00"
                }
            }
        ],
        "paging": {
            "current": 1,
            "next": null,
            "currentItemCount": 5,
            "first": 1,
            "itemCountPerPage": 20,
            "pageCount": 1,
            "totalItemCount": 5,
            "pageInfo": true
        }
    }
}

Solution

  • You are missing brackets around the wildcard item and you should use below search query which will avoid selecting all segment_id nodes but only ones that are direct children of the data node:

    $.response.data[*].segment_id
    
    public class JsonPathReader
    {
      public static void main(String[] args) throws IOException
      {   
        InputStream jsonData; // Load you response json feed.
        List<Integer> segmentIds = JsonPath.read(jsonData, "$.response.data[*].segment_id");
        System.out.println(segmentIds);
      }
    }
    

    Which should produce the expected array elements:

    [25226676,25226672,25226668]