ruby 如何访问不总是位于同一位置的某个JSON元素?

8fq7wneg  于 2023-03-17  发布在  Ruby
关注(0)|答案(1)|浏览(88)

给定下面从API返回的JSON,在Ruby中从(且仅从)包含"detail_type": "SubTotalLineDetail"的数组元素中检索value元素的最佳方法是什么?
问题在于,小计行项目的位置并不固定为总是倒数第二个行项目,它通常位于最后一个位置,但是,如示例所示,这可能会发生变化,因此我尝试的i.sub_total = invoice[:line_items].last[:amount]并不总是有效。

[
    {
        "id": "1",
        "line_num": 1,
        "description": "Custom Design",
        "amount": "300.0",
        "detail_type": "SalesItemLineDetail",
        "sales_line_item_detail": {
            "item_ref": {
                "value": "4",
                "name": "Design",
                "type": null
            },
            "class_ref": null,
            "unit_price": "75.0",
            "rate_percent": null,
            "price_level_ref": null,
            "quantity": "4.0",
            "tax_code_ref": {
                "value": "NON",
                "name": null,
                "type": null
            },
            "service_date": null,
            "tax_inclusive_amount": null
        },
        "sub_total_line_detail": null,
        "payment_line_detail": null,
        "discount_line_detail": null,
        "group_line_detail": null,
        "description_line_detail": null
    },
    {
        "id": null,
        "line_num": null,
        "description": null,
        "amount": "1005.0",
        "detail_type": "SubTotalLineDetail",
        "sales_line_item_detail": null,
        "sub_total_line_detail": {
            "item_ref": null,
            "class_ref": null,
            "unit_price": null,
            "quantity": null,
            "tax_code_ref": null
        },
        "payment_line_detail": null,
        "discount_line_detail": null,
        "group_line_detail": null,
        "description_line_detail": null
    },
    {
        "id": null,
        "line_num": null,
        "description": null,
        "amount": "50.25",
        "detail_type": "DiscountLineDetail",
        "sales_line_item_detail": null,
        "sub_total_line_detail": null,
        "payment_line_detail": null,
        "discount_line_detail": {
            "discount_ref": null,
            "percent_based": true,
            "discount_percent": "5.0",
            "discount_account_ref": {
                "value": "86",
                "name": "Discounts given",
                "type": null
            },
            "class_ref": null,
            "tax_code_ref": null
        },
        "group_line_detail": null,
        "description_line_detail": null
    }
]
wz1wpwve

wz1wpwve1#

array.filter_map {|x| x[:amount].to_f if x[:detail_type].eql?('SubTotalLineDetail') }

如果你想求和

array.filter_map {|x| x[:amount].to_f if x[:detail_type].eql?('SubTotalLineDetail') }.sum

相关问题