2017-02-06 4 views
-1

Ich muss eine Tabelle aus ausgewählten Daten erstellen, die von einer Leihsoftware im JSON-Format über eine API generiert werden. Die gelieferten json-Daten sind eine Liste von Produkten und sind ziemlich umfangreich mit Objekten, die andere Objekte und Arrays enthalten.So erhalten Sie JSON-Daten von mehreren Objektebenen

Das Problem kommt, wenn ich die Daten von einem Objekt innerhalb eines Objekts abrufen müssen. Ich möchte Name, Gewicht und Mietpreis aus den unten stehenden Daten erhalten. Der Mietpreis befindet sich im Objekt mietpreis.

{ 
"products": [ 
{ 
    "id": 1404, 
    "name": "Product 1", 
    "type": "Product", 
    "tag_list": [], 
    "description": "", 
    "allowed_stock_type": 1, 
    "allowed_stock_type_name": "Rental", 
    "stock_method": 1, 
    "stock_method_name": "Bulk", 
    "buffer_percent": "50.0", 
    "post_rent_unavailability": 0, 
    "replacement_charge": "0.0", 
    "weight": "0.5", 
    "barcode": "@st2078", 
    "active": true, 
    "accessory_only": false, 
    "system": false, 
    "discountable": true, 
    "rental_rate": { 
    "item_id": 1404, 
    "store_id": 1, 
    "transaction_type": 1, 
    "rate_definition_id": 3, 
    "price": "10.0", 
    "deposit": "0.0", 
    "category_prices": [], 
    "properties": { 
     "day_cost": "0.0", 
     "day_price": "0.0", 
     "hour_cost": "0.0", 
     "hour_price": "0.0", 
     "__value_types": "---\nday_price: BigDecimal\nhour_price: BigDecimal\ndistance_price: BigDecimal\nflat_rate_price: BigDecimal\nday_cost: BigDecimal\nhour_cost: BigDecimal\ndistance_cost: BigDecimal\nflat_rate_cost: BigDecimal\n", 
     "distance_cost": "0.0", 
     "distance_price": "0.0", 
     "flat_rate_cost": "0.0", 
     "flat_rate_price": "0.0" 
    }, 
    "priority": 0, 
    "date_range": "1900-01-01...3000-01-01" 
    }, 
    "sale_rate": null, 
    "product_group_id": 5, 
    "tax_class_id": 2, 
    "rental_revenue_group_id": 1, 
    "sale_revenue_group_id": null, 
    "created_at": "2017-02-06T00:49:47.755Z", 
    "updated_at": "2017-02-06T00:49:47.755Z", 
    "custom_fields": { 
    "barcode_notes": "Actual Leg Length is: 3'", 
    "product_serial_number": "" 
    }, 
    "product_group": { 
    "id": 5, 
    "name": "Staging", 
    "description": "", 
    "created_at": "2017-02-05T22:20:53.465Z", 
    "updated_at": "2017-02-05T22:20:53.465Z", 
    "custom_fields": {} 
    }, 
    "tax_class": { 
    "id": 2, 
    "name": "VAT Standard" 
    }, 
    "icon": null, 
    "rental_revenue_group": { 
    "id": 1, 
    "name": "Rental", 
    "description": "", 
    "active": true 
    }, 
    "sale_revenue_group": null, 
    "accessories": [], 
    "alternative_products": [], 
    "attachments": [], 
    "rental_rates": [ 
    { 
     "id": 1782, 
     "store_id": null, 
     "store_name": "", 
     "rate_definition_id": 3, 
     "rate_definition_name": "3 Day Week Rate", 
     "starts_at": null, 
     "ends_at": null, 
     "price": "10.0", 
     "category_prices": [] 
    } 
    ], 
    "sale_rates": [] 
}, 
{ 
    "id": 2395, 
    "name": "Product 2", 
    "type": "Product", 
    "tag_list": [], 
    "description": "", 
    "allowed_stock_type": 1, 
    "allowed_stock_type_name": "Rental", 
    "stock_method": 2,x 
    "stock_method_name": "Serialised", 
    "buffer_percent": "50.0", 
    "post_rent_unavailability": 0, 
    "replacement_charge": "0.0", 
    "weight": "45.0", 
    "barcode": "", 
    "active": true, 
    "accessory_only": false, 
    "system": false, 
    "discountable": true, 
    "rental_rate": { 
    "item_id": 2395, 
    "store_id": 1, 
    "transaction_type": 1, 
    "rate_definition_id": 3, 
    "price": "0.0", 
    "deposit": "0.0", 
    "category_prices": [], 
    "properties": { 
     "day_cost": "0.0", 
     "day_price": "0.0", 
     "hour_cost": "0.0", 
     "hour_price": "0.0", 
     "__value_types": "---\nday_price: BigDecimal\nhour_price: BigDecimal\ndistance_price: BigDecimal\nflat_rate_price: BigDecimal\nday_cost: BigDecimal\nhour_cost: BigDecimal\ndistance_cost: BigDecimal\nflat_rate_cost: BigDecimal\n", 
     "distance_cost": "0.0", 
     "distance_price": "0.0", 
     "flat_rate_cost": "0.0", 
     "flat_rate_price": "0.0" 
    }, 
    "priority": 0, 
    "date_range": "1900-01-01...3000-01-01" 
    }, 
    "sale_rate": null, 
    "product_group_id": 6, 
    "tax_class_id": 2, 
    "rental_revenue_group_id": 1, 
    "sale_revenue_group_id": null, 
    "created_at": "2017-02-06T00:50:35.834Z", 
    "updated_at": "2017-02-06T00:50:35.834Z", 
    "custom_fields": { 
    "barcode_notes": "", 
    "product_serial_number": "" 
    }, 
    "product_group": { 
    "id": 6, 
    "name": "Cases", 
    "description": "", 
    "created_at": "2017-02-05T22:20:53.509Z", 
    "updated_at": "2017-02-05T22:20:53.509Z", 
    "custom_fields": {} 
    }, 
    "tax_class": { 
    "id": 2, 
    "name": "VAT Standard" 
    }, 
    "icon": null, 
    "rental_revenue_group": { 
    "id": 1, 
    "name": "Rental", 
    "description": "", 
    "active": true 
    }, 
    "sale_revenue_group": null, 
    "accessories": [], 
    "alternative_products": [], 
    "attachments": [], 
    "rental_rates": [ 
    { 
     "id": 2773, 
     "store_id": null, 
     "store_name": "", 
     "rate_definition_id": 3, 
     "rate_definition_name": "3 Day Week Rate", 
     "starts_at": null, 
     "ends_at": null, 
     "price": "0.0", 
     "category_prices": [] 
    } 
    ], 
    "sale_rates": [] 
} 
    ], 
"meta": { 
"total_row_count": 1376, 
"row_count": 2, 
"page": 1, 
"per_page": 2 
    } 
    } 

und hier ist die JS ich die Daten zu erhalten, bin mit:

$(document).ready(function() { 
$.getJSON('https://myapi.com/products', function(data) { 
    $.each(data.products, function() { 
    $("table#prod").append("<tr><td>" + this['name'] + "</td><td>" + this['rental_rate.price'] + "</td><td>" + this['weight'] + "kg</td></tr>"); 
    }); }); }); 

Dies funktioniert für Name und Gewicht in Ordnung, aber nicht Mietpreis. Ich habe die meisten Orte im Internet gründlich durchsucht und keine Antwort gefunden - mein JavaScript-Wissen ist begrenzt, was bedeutet, dass ich alles falsch mache oder es nicht gut genug beschreibe ... Jede Hilfe oder verbesserte Methoden würde sehr geschätzt werden!

+0

Sie müssen 'dieses [ 'rental_rate'] [ 'Preis']' oder 'this.rental_rate [ 'Preis']' oder 'this.rental_rate. Preis Zwei Minuten Grundlagenforschung hätten diese Information ergeben. –

+0

@ChrisG - Kann ich einen Kommentar abgeben? – Adam

+0

@Adam Nein. Zwei Minuten Grundlagenforschung hätten diese Information ergeben. –

Antwort

1

this.name bekommt man den Namen

this.rental_rate bekommt man die verschachtelte Mietpreis Objekt.

this.rental_rate.price bekommen Sie den Preis.

Sie können square bracket notation ähnlich verwenden, aber Leute tun dies oft nur, wenn die Punktsyntax nicht funktioniert (wegen Leerzeichen im key).

z.B.

this["name"]

this["rental_rate"]["price"]

this["Invalid Key when accessed via dot syntax but fine with square brackets"]

+0

Danke für die schnelle Antwort Adam, und für die Lösung meines Problems. Ich hatte total falsch verstanden was ich tat! – James

Verwandte Themen