kyku102
6.04.2023, 22:05:07
Witam,
mam problem z wypisaniem kolejno vehicle_model i vehicle_price. Jak powinna wyglądać poprawnie pętla foreach w PHP, która wypisze te dane z kolekcji JSON takiej jak niżej?
{
"permissions": {
"isGroupOwner": false,
"warehouse": true,
"gates": true,
"vehicles": true,
"lombard": true,
"leader": true
},
"warehouse": {
"id": 1600,
"warehouseID": 4,
"groupID": 749,
"expires": 1680940342,
"warehouse": {
"id": 4,
"price_start": 670000,
"price_rent": 65000,
"size": 12,
"minimum_level": 100,
"vehicles": [
{
"id": 295898,
"vehicle_model": 451,
"default_vehicle_price": 1570500,
"vehicle_price": 942300,
"stats": "[[[1680789608,1115055],[1680793211,1303515],[1680796813,1319220],[168080041
7,1963125],[1680804002,1382040],[1680807605,1633320],[1680811207,942300]]]",
"color": "[[123,123,0,0]]"
},
{
"id": 296186,
"vehicle_model": 562,
"default_vehicle_price": 658240,
"vehicle_price": 579251,
"stats": "[[[1680800417,493680],[1680804002,427856],[1680807605,454185],[1680811207,5
79251]]]",
"color": "[[116,1,0,0]]"
},
{
"id": 296206,
"vehicle_model": 434,
"default_vehicle_price": 609840,
"vehicle_price": 408592,
"stats": "[[[1680804002,548856],[1680807605,390297],[1680811207,408592]]]",
"color": "[[1,1,0,0]]"
},
{
"id": 296241,
"vehicle_model": 562,
"default_vehicle_price": 658240,
"vehicle_price": 572668,
"stats": "[[[1680811207,572668]]]",
"color": "[[11,1,0,0]]"
},
{
"id": 296254,
"vehicle_model": 562,
"default_vehicle_price": 658240,
"vehicle_price": 230384,
"stats": "[[]]",
"color": "[[113,1,0,0]]"
}
]
}
}
}
Tomplus
7.04.2023, 05:22:43
foreach($json->warehouse->warehouse['vehicles'] as $vehicles) {
echo "<br>Pojazd: ".$vehicles->vehicle_model.", cena: ".$vehicles->vehicle_price;
}
Musisz wiedzieć, że klamerki {} determinują JSON jako obiekt, a nawiasy kwadratowe [] jako tablicę.
zresztą użyj var_dump($json) i będziesz miał wszystko co potrzebujesz,
kyku102
7.04.2023, 07:53:56
Cytat(Tomplus @ 7.04.2023, 06:22:43 )

foreach($json->warehouse->warehouse['vehicles'] as $vehicles) {
echo "<br>Pojazd: ".$vehicles->vehicle_model.", cena: ".$vehicles->vehicle_price;
}
Musisz wiedzieć, że klamerki {} determinują JSON jako obiekt, a nawiasy kwadratowe [] jako tablicę.
zresztą użyj var_dump($json) i będziesz miał wszystko co potrzebujesz,
To co zaproponowałeś nic mi nie wypisuje właśnie ;/
viking
7.04.2023, 08:11:06
Zrób sobie json_decode($tenString, true, 512, JSON_THROW_ON_ERROR); na początek.
https://jsonformatter.curiousconcept.com/# Invalid character "stats":"[[[1680789608,1115055],[1680793211,1303515],[1680796813,1319220],[168080041
7,1963125],[1680804002,1382040],[1680807605,1633320],[1680811207,942300]]]",[Code 180, Structure 93]
kyku102
7.04.2023, 10:01:28
Cytat(viking @ 7.04.2023, 09:11:06 )

Zrób sobie json_decode($tenString, true, 512, JSON_THROW_ON_ERROR); na początek.
https://jsonformatter.curiousconcept.com/# Invalid character "stats":"[[[1680789608,1115055],[1680793211,1303515],[1680796813,1319220],[168080041
7,1963125],[1680804002,1382040],[1680807605,1633320],[1680811207,942300]]]",[Code 180, Structure 93]
Dalej nic - kolekcje pobieram przez curl - tak to u mnie wygląda:
$token = "xxxxx";
$groupid = 749;
$curl = curl_init("https://ucp.paradise-rpg.pl/api/group/$groupid/warehouses");
$headers = [
"Content-Type:application/json",
"Authorization: Bearer $token",
"user-agent: Chrome/79"
];
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
curl_close($curl);
$json = json_decode($result, true, 512, JSON_THROW_ON_ERROR);
foreach($json->warehouse->warehouse['vehicles'] as $vehicles) {
echo "<br>Pojazd: ".$vehicles->vehicle_model.", cena: ".$vehicles->vehicle_price; }
viking
7.04.2023, 10:25:05
Działa, json ze źródła jest poprawny:
$data = json_decode($x, false, 512, JSON_THROW_ON_ERROR);
foreach($data->warehouse->warehouse->vehicles as $vehicles) {
echo "<br>Pojazd: ".$vehicles->vehicle_model.", cena: ".$vehicles->vehicle_price; }
Możesz też zmienić drugi klucz na true wtedy będziesz miał $data jako tablicę.
Ukryj ten klucz jeśli jest jakiś prywatny.