Hallo

I heb een probleem met het opvragen van waarden uit een API die JSON-bestanden levert (GET-request).
De URI eindigt op .../product_feeds/products.

Dit lukt wel bij een verwijzing naar nivo 2, bv. een property van een object, maar niet als er dieper in de structuur gezocht moet worden (zie onder)

Een voorbeeld van de structuur van het JSON-bestand (verkorte versie)

=====================================================
HTTP 200 OK
X-XSS-Protection: 1; mode=block

X-Request-Id: *****************************
X-Frame-Options: SAMEORIGIN
X-Runtime: 1.396538
x-content-type-options: nosniff
X-Powered-By: Phusion Passenger 5.0.30
Etag: *****************************
Status: 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 04 Nov 2016 18:43:00 GMT
Server: Apache
Cache-Control: max-age=0, private, must-revalidate
Vary: Origin


{
"data": [
{
"product_nr": 6879,
"product_info": {
"description": "2000",
"total_stock": 6,
"year": 2016,
"brand_nr": 22,
"modified_at": "2016-09-28 11:30:01",
"created_at": "2016-07-22 11:30:01"
},
"articles": [
{
"color_nr": 33,
"color": "middelbruin",
"article_info": [
{
"sku_nr": 3727,
"barcode_nr": "4006879045",
"size": "8",
"stock": 1,
},
{
"sku_nr": 3728,
"barcode_nr": "4006879053",
"size": "8½",
"stock": 1,
},

]
}
]
}
],
"meta": {
"page": 1,
"page_size": 25,
"page_count": 1,
"total_count": 1
}
}
===============================================================================
I heb de volgende varianten geprobeerd in een jquery result function:

1)var size=data.data[0].articles[0].article_info[0].size;
console.log(size);
TypeError: data.data[0] is undefined

2)var size=data[0].articles[0].article_info[0].size;
console.log(size);
TypeError: data[0] is undefined

Overigens kan ik wel de lengte uitlezen van de array data met:
var len=data.data.length (output van console.log:0)

De meta-informatie kan wel worden getoond met:

var maxpage=data.meta.page_size;(output in console.log:25)

Wat gaat hier fout? Kan het een probleem zijn dat "data" hier op twee manieren wordet gebruikt, nl. eerst als verwijzing naar het data-object, en daarbinnen ook naar een array "data"? In een ander bestand met een URI eindigend op ../product_feeds/brands levert een verwijzing naar data.brands[0].brand_nr geen probleem op.
Ik hoop dat iemand mijn code kan verbeteren.
bij voorbaat dank.






is het niet

var size=data.data.articles.article_info.size;
De json die je in starttopic hebt staan is geen geldige json. Er staan een paar komma's te veel in.

De juiste json is:

{
    "data": [
        {
            "product_nr": 6879,
            "product_info": {
                "description": "2000",
                "total_stock": 6,
                "year": 2016,
                "brand_nr": 22,
                "modified_at": "2016-09-28 11:30:01",
                "created_at": "2016-07-22 11:30:01"
            },
            "articles": [
                {
                    "color_nr": 33,
                    "color": "middelbruin",
                    "article_info": [
                        {
                            "sku_nr": 3727,
                            "barcode_nr": "4006879045",
                            "size": "8",
                            "stock": 1
                        },
                        {
                            "sku_nr": 3728,
                            "barcode_nr": "4006879053",
                            "size": "8½",
                            "stock": 1
                        }
                    ]
                }
            ]
        }
    ],
    "meta": {
        "page": 1,
        "page_size": 25,
        "page_count": 1,
        "total_count": 1
    }
}
De overbodige komma's waren het gevolg van een slordigheid bij het verkorten van het voorbeeld. De originele JSON-code is geheel in orde. Na veel proberen ben ik er achter gekomen wat de oorzaak was. De documentatie van de API-leverancier bevatte een voorbeeld dat ik heb gekopieerd waarin de data: was omgeven door komma's (single quotes). Nadat ik die had verwijderd kreeg ik ook waarden uit de data-array terug.


citaat:
JQuery voorbeeld POST request

Onderstaand voorbeeld voert een AJAX post request uit en geeft een alert van de de response header and body, vergelijkbaar met de manier zoals het in deze APIDOCS is geïmplementeerd.


$.ajax({
url: "https://demo.easyposonline.nl/api/v1/product_feeds/products",
headers: { "Authorization": "Token token=\"******************\" },
type: "POST",
data: '{ "name": "value", "nr": 12 }',
contentType: "application/json; charset=utf-8",
dataType: "json",

success: function(data,textStatus,xhr) {
(.............)
});
(einde citaat)

Mijn probleem is dus opgelost.

Reageren