i'm trying to build a json array in php, but a more complex one.
The point is, that i'm trying to make a database for dish calculations, and the array should look something like that.
Each dish has a name, a base weight, diameter and height. It also has half-finished products that include a single product with its weight.
For example There's a finished product Called "Cake" they base weight is 750 g., the height is 8cm and the diameter is 8cm. Now this cake is made from 3 different half-products that build up the 750g.:
Dough (300 g.)
Icing (300 g.)
Decorations. (150 g.)
And now every half-product has its own single product that builds it up
Dough: 300g.
Flour 100g
Water 100 g
Something else 100g.
And so on for every half product.
I've tried building arrays but this one seems a bit to hard for me, any suggestions on how todo this? Thanks!
EDIT: I need to get something like this
[
{
"Title": "Cake",
"base_weight": 750,
"base_height": 8,
"base_diameter": 14,
"half_products": [
{
"title": "Dough",
"weight": 300,
"ingredients": [
{
"title": "Flour",
"Weight": 150
},
{
"title": "Water",
"Weight": 150
}
]
},
{
"title": "Icing",
"weight": 300,
"ingredients": [
{
"title": "Flour",
"Weight": 150
},
{
"title": "Water",
"Weight": 150
}
]
},
{
"title": "Decorations",
"weight": 150,
"ingredients": [
{
"title": "Flowers",
"Weight": 150
}
]
}
]
}
]
You can use recursive tree methods for it and then you can easily convert it to json.
Arnaud Le Blanc coded it before here
https://stackoverflow.com/a/4844073/2528471
function buildTree($items) {
$childs = array();
foreach($items as &$item)
$childs[(int)$item['parent_id']][] = &$item;
foreach($items as &$item)
if (isset($childs[$item['id']]))
$item['childs'] = $childs[$item['id']];
return $childs[0];
}
$tree = buildTree($items); // $items variable must store all data from your database table
You can use it and then use the standard php method easily.
json_encode($tree);
Related
by doing a GET-Request, I am receiving routing informations from the HERE Routing API:
https://router.hereapi.com/v8/routes?apikey=MY_API_KEY&destination=52.530394,13.400683&origin=52.530728,13.383833&return=polyline,travelSummary&transportMode=truck&&vehicle[speedCap]=30&spans=names,length,duration,speedLimit
Now I want to find the coordinates for example in the middle of the route with respect to the total time. So I the example below, the total duration is 274 seconds. How can I find out, on which position I will be after 137 seconds? (In real application these times are much longer. Here, for simplicity and for a small JSON file size, I have chosen only a short distance)
First, I thought of adding starting and ending coordinates of the spans, however it seems not to be possible with the API.
Second, I thought of using the polyline. From that I receive a lot of coordinates, however I don't see a possiblity to connect one of these coordinates to a certain duration of travel.
Is there any way how I can get the information I am looking for with the HERE Routing API or with any PHP calculation?
{
"routes": [
{
"id": "90be4eb8-d0ba-47f8-9954-9be444576a17",
"sections": [
{
"id": "bfd32e45-662b-4b7e-a297-21eeee09dd68",
"type": "vehicle",
"departure": {
"time": "2021-12-11T23:42:04+01:00",
"place": {
"type": "place",
"location": {
"lat": 52.5307744,
"lng": 13.3838015
},
"originalLocation": {
"lat": 52.5307279,
"lng": 13.383833
}
}
},
"arrival": {
"time": "2021-12-11T23:46:38+01:00",
"place": {
"type": "place",
"location": {
"lat": 52.5303982,
"lng": 13.4006967
},
"originalLocation": {
"lat": 52.5303939,
"lng": 13.4006829
}
}
},
"travelSummary": {
"duration": 274,
"length": 1338,
"baseDuration": 264
},
"polyline": "BGslnmkDyn8wZ8CmL4Iof0F0U8BoGsEoQwCsJsEkSoBoG8BsJsE0U8BgK8BoLoB4IoB0KoBoLoBkNwC8a8B0UoB0UoBkNsEgtBkDsd8BsTkDgZsEgtB4D0jBgFwvBoG46B8B8QwCoV8BwMgFgtBUwHkD8akDgeU4NoB4XAkIoB0ZoB8pBU0K8Boa8B0PkDkS7GkD3I0F3DwC7foa7G0Fzeoaze0ZvTiQ",
"spans": [
{
"offset": 0,
"names": [
{
"value": "Invalidenstraße",
"language": "de"
}
],
"length": 189,
"duration": 31,
"speedLimit": 13.8888893
},
{
"offset": 11,
"names": [
{
"value": "Invalidenstraße",
"language": "de"
}
],
"length": 872,
"duration": 184,
"speedLimit": 8.333334
},
{
"offset": 44,
"names": [
{
"value": "Brunnenstraße",
"language": "de"
}
],
"length": 277,
"duration": 59,
"speedLimit": 8.333334
}
],
"transport": {
"mode": "truck"
}
}
]
}
]
}
Using the information in the spans object is definitely the way to go. What you need is to break up the spans into as many pieces as possible. You can do that by adding these values to the parameter in your request:
&spans=duration,length,segmentId,names,speedLimit,dynamicSpeedInfo,baseDuration,typicalDuration,segmentRef
You'll see that the response includes a list of spans identified by the offset attribute, which tells you what coordinate in your polyline that span refers to. This means that you want to know what is the offset (coordinate index) where the sum of span durations is 137.
This procedure will get you the best approximation to the middle of the route relative to travel time:
Loop through the list of spans and sum the value in the duration attribute; the loop should stop when the sum is equal or greater than the desired duration (137 in your example).
Get the value of the offset attribute, and add 1.
Decode your polyline, and get the coordinates at the index that is equal to the number you got in step 2 (offset + 1).
For the route in your example, the span that meets the condition in step 1 is offset=31, so you're interested in the coordinates at index 32 from your polyline.
I'm trying to have an array that is gonna be passed as JSON to an angular View.
The structure of the sql result is roughly :
Order Number
Supplier
Qty
Date
OrderState
ProductA(including size)
GenericA(excluding size)
LibA
TypeA(Package,Batch,Product)
SizeA
SizeNameA
ProductB
GenericB
LibB
TypeB
SizeB
SizeNameB
QtyPerSizeB
ProductC
GenericC
LibC
TypeC
SizeC
SizeNameC
QtyPerSizeC
It is done with left joins, so the cost concerns the last non null product.
If it's a package :
ProductA -> Package
ProductB -> Batch (Child of A)
ProductC -> Product (Child of B)
If it's a batch or a package with no batches :
ProductA -> Package/Batch
ProductB -> Product
ProductC -> null
If it's only products :
ProductA -> Product
ProductB/C -> null
So I need to have a hierarchy of some sort so I can loop through these objects.
Something similar to this :
{
"order": {
"infos": {},
"products": {
"name": "x",
"type": "Package",
"sizes": {
"1": {
"qty": "",
"price": ""
},
"2": {
"qty": "",
"price": ""
}
},
"children": {
"name": "x",
"type": "Batch",
"sizes": {
"1": {
"qty": "",
"price": ""
},
"2": {
"qty": "",
"price": ""
}
},
"children": {
"name": "x",
"type": "Batch",
"sizes": {
"1": {
"qty": "",
"price": ""
},
"2": {
"qty": "",
"price": ""
}
},
}
}
}
}
}
I tried setting each of them by looping through all the results but due to the complexity, it takes too long to develop/modify/maintain.
So I was wondering if there was any way to specify another array containing keys and instructions (something like "parent of","sum of","child of"), and then merge the sql result into a multidimensional array that follows the structure above.
I look forward to reading your comments, you geniuses, and thanks for reading !
Raekh
Okay no responses.
I ended up creating classes that describe the data that I want.
If you're in need of a similar structure, contact me and I'll share how I did it.
Here is my JSON file which is called (inventory.json). How do I parse the json so I can get all of the inventory's tag_name in the "Descriptions" array? Since the Inventory array's classid points out to the description's id/classid, it seems possible to get each of the inventory's tag from the description but I have no idea to do it.
I read something about recursive array iterator and for each but I have no idea which one is appropriate in this circumstance. I am very new here so please be kind! Thank you.
{
"Inventory": {
"7905269096": {
"id": "7905269096",
"classid": "771158876",
"instanceid": "782509058",
"amount": "1",
"pos": 1
},
"7832200468": {
"id": "7832200468",
"classid": "626495772",
"instanceid": "1463199080",
"amount": "1",
"pos": 2
},
"7832199378": {
"id": "7832199378",
"classid": "626495770",
"instanceid": "1463199082",
"amount": "1",
"pos": 3
},
"Descriptions": {
"771158876": {
"classid": "771158876",
"instanceid": "782509058",
"tags": [{
"tag_name": "unique",
"name": "standard"
}]
}
}
}
}
Your JSON string is invalid, but hopefully this answer will lead you on the right path to your desired result.
First, make it into a PHP array:
$jsonArray = /* your json array */;
$phpArray = json_decode($jsonArray, true);
Then you can iterate through one of the arrays (the "Inventory" one) and find the relevant tag name:
//Create a new array to hold the key=>value data
$combined = [];
foreach($phpArray["Inventory"] as $i => $v){
//Find the relevant key in the Descriptions array and
//push this information information to the $combined array
$combined[$i] = $phpArray["Descriptions"][$i]["tags"]["tag_name"];
/* The above is essentially the same as
$combined["7905269096"] = "unique"; */
}
Then, $combined will be a key/value array where the key is the ID (e.g. "7905269096") and the value will be the tag name (e.g. "unique").
My PHP code:
$obj = json_decode($data);
print $obj->{'name'};
While it works for non-arrays, I can't for the life of me figure out how to print all the values within the "Reviews" Array.
What I would like to do is to loop through this response, probably with forreach(), resulting in a list containing the rating and excerpt for each review in the response.
Any guidance / direction is greatly appreciated..
Below is the JSON I'm working with. (it is the response from the Yelp API).
{
"is_claimed": true,
"rating": 4.5,
"mobile_url": "http://m.yelp.com/biz/economy-paint-and-collision-riverside",
"rating_img_url": "http://s3-media2.ak.yelpcdn.com/assets/2/www/img/99493c12711e/ico/stars/v1/stars_4_half.png",
"review_count": 19,
"name": "Economy Paint & Collision",
"snippet_image_url": "http://s3-media3.ak.yelpcdn.com/photo/ZOzoahw0Go_DEPLvxCaP_Q/ms.jpg",
"rating_img_url_small": "http://s3-media2.ak.yelpcdn.com/assets/2/www/img/a5221e66bc70/ico/stars/v1/stars_small_4_half.png",
"url": "http://www.yelp.com/biz/economy-paint-and-collision-riverside",
"reviews": [
{
"rating": 3,
"excerpt": "The Good:\nDennis quoted me a price over the phone about 1 month before I took my wifes 2010 Escalade in for repairs and when I took it in he gave me the...",
"time_created": 1357010247,
"rating_image_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/34bc8086841c/ico/stars/v1/stars_3.png",
"rating_image_small_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/902abeed0983/ico/stars/v1/stars_small_3.png",
"user": {
"image_url": "http://s3-media3.ak.yelpcdn.com/photo/mIsU7ugYd88lLA-XL2q1Cg/ms.jpg",
"id": "V9MDZvEBv-tBTF4YIoc7mg",
"name": "Sydney H."
},
"rating_image_large_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/e8b5b79d37ed/ico/stars/v1/stars_large_3.png",
"id": "HfOhzLIlJoUKSKU8euclqA"
},
{
"rating": 5,
"excerpt": "Dennis and his team did an amazing job on the roof of my fiancee's 2002 Acura RSX after years of living by the beach in San Francisco had mostly rusted...",
"time_created": 1354741952,
"rating_image_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png",
"rating_image_small_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png",
"user": {
"image_url": "http://s3-media3.ak.yelpcdn.com/photo/ZOzoahw0Go_DEPLvxCaP_Q/ms.jpg",
"id": "kOqCnCjYn0EbAhtH1tfjcw",
"name": "Jason H."
},
"rating_image_large_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png",
"id": "YzZg1LX6zeRaurq9tYUcMw"
},
{
"rating": 5,
"excerpt": "It's been a year since I had my car painted here, and I gotta say: It still looks just as good as it did when I first picked it up. You would never know...",
"time_created": 1361043626,
"rating_image_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png",
"rating_image_small_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png",
"user": {
"image_url": "http://s3-media1.ak.yelpcdn.com/photo/58coTtu1x5riHSgFEAQsfw/ms.jpg",
"id": "kVrW3138d5VL-AZ97wFF4A",
"name": "Jeanne M."
},
"rating_image_large_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png",
"id": "r5WtlQVMXiIMBR6S3N7RZw"
}
],
"phone": "9517870227",
"snippet_text": "Dennis and his team did an amazing job on the roof of my fiancee's 2002 Acura RSX after years of living by the beach in San Francisco had mostly rusted...",
"image_url": "http://s3-media3.ak.yelpcdn.com/bphoto/kodoEcmgHRG61pPaWRndbw/ms.jpg",
"categories": [
[
"Body Shops",
"bodyshops"
],
[
"Auto Repair",
"autorepair"
]
],
"display_phone": "+1-951-787-0227",
"rating_img_url_large": "http://s3-media4.ak.yelpcdn.com/assets/2/www/img/9f83790ff7f6/ico/stars/v1/stars_large_4_half.png",
"id": "economy-paint-and-collision-riverside",
"is_closed": false,
"location": {
"city": "Riverside",
"display_address": [
"2548 Rubidoux Blvd",
"Riverside, CA 92509"
],
"geo_accuracy": 8,
"postal_code": "92509",
"country_code": "US",
"address": [
"2548 Rubidoux Blvd"
],
"coordinate": {
"latitude": 34.0132437,
"longitude": -117.3923804
},
"state_code": "CA"
}
}
You are probably having trouble because reviews is an array and you are trying to access it as a JSON object.
$obj = json_decode($data, TRUE);
for($i=0; $i<count($obj['reviews']); $i++) {
echo "Rating is " . $obj['reviews'][$i]["rating"] . " and the excerpt is " . $obj['reviews'][$i]["excerpt"] . "<BR>";
}
I'm not sure what exactly you want but I guess you want print it just for debugging right now. You can try with print_r($obj); and var_dump($obj); - they must print something, especially var_dump().
When you see the data, you can easily edit function a little bit, so you can do for instance print_r($obj->reviews) or print_r($obj['reviews']), depending if $obj is object or array.
You can use var_dump or print_r.
<?php
$decodedJSON = json_decode($jsonData);
// Put everyting to the screen with var_dump;
var_dump($decodedJSON);
// With print_r ( useful for arrays );
print_r($decodedJSON);
// List just review ratings with foreach;
foreach($decodedJSON['reviews'] as $review){
echo $review['rating'];
}
?>
Here using objects example (to read reviews...raiting):
$jsonObject = json_decode($data);
foreach ($jsonObject->reviews as $data) {
echo $data->rating;
}
I'm attempting to pull in data from Google's Shopping API. I'm able to download the data successfully, but I'm having trouble parsing through it with PHP. I'm still learning, but I seem to be having issues with multi-dimensional arrays. I capture the JSON with $json = json_decode($data);.
The following just echos the outer array, but I can't pull from the inner array:
foreach($json as $key => $value) {
echo $key . " : " . $value;
}
If I want to grab the "title", "description", "brand", and "availability" for each product, how would I parse through it?
{
"kind": "shopping#products",
"etag": "\"T9uPnY2MZMB71TDpKXXZdr3yWX4/qtJ5vmpftFWNfijyLD9ti2Xpj-w\"",
"id": "tag:google.com,2010:shopping/products",
"selfLink": "https://www.googleapis.com/shopping/search/v1/public/products?country\u003dus&q\u003dsony&maxResults\u003d3&startIndex\u003d2",
"nextLink": "https://www.googleapis.com/shopping/search/v1/public/products?country\u003dus&q\u003dsony&maxResults\u003d3&startIndex\u003d5",
"previousLink": "https://www.googleapis.com/shopping/search/v1/public/products?country\u003dus&q\u003dsony&maxResults\u003d3&startIndex\u003d1",
"totalItems": 633694,
"startIndex": 2,
"itemsPerPage": 3,
"currentItemCount": 3,
"items": [
{
"kind": "shopping#product",
"id": "tag:google.com,2010:shopping/products/1161353/11882813508247586172",
"selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/1161353/gid/11882813508247586172",
"product": {
"googleId": "11882813508247586172",
"author": {
"name": "Buy.com",
"accountId": "1161353"
},
"creationTime": "2011-04-24T05:13:38.000Z",
"modificationTime": "2011-08-05T17:45:24.000Z",
"country": "US",
"language": "en",
"title": "Sony BRAVIA KDL-46EX720 46 inch 3D LED HDTV 1080p 120Hz",
"description": "Entertainment lovers the slim Sony EX720-Series LED HDTV is for you. See precise motion detail plus watch your favorite 2D or 3D entertainment in clear, vivid Full HD 1080p picture quality with incredible contrast. You can even connect to the internet and access a great selection of online entertainment with Netflix , Hulu Plus , Pandora , Qriocity and more - there s always something on. Plus video chat with friends and family when you Skype on the big screen.",
"link": "http://clickfrom.buy.com/default.asp?adid\u003d17902&sURL\u003dhttp%3A%2F%2Fwww.buy.com%2Fprod%2Fsony-bravia-kdl-46ex720-46-3d-led-hdtv-1080p-120hz%2Fq%2Fsellerid%2F10004001%2Floc%2F111%2F219891693.html",
"brand": "Sony",
"condition": "new",
"gtin": "00027242817081",
"gtins": [
"00027242817081"
],
"inventories": [
{
"channel": "online",
"availability": "inStock",
"price": 1348.0,
"currency": "USD"
}
],
"images": [
{
"link": "http://ak.buy.com/PI/0/1000/219891693.jpg"
}
]
}
},
{
"kind": "shopping#product",
"id": "tag:google.com,2010:shopping/products/7827/1976288072671326122",
"selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/7827/gid/1976288072671326122",
"product": {
"googleId": "1976288072671326122",
"author": {
"name": "Dell",
"accountId": "7827"
},
"creationTime": "2011-06-08T15:11:49.000Z",
"modificationTime": "2011-08-05T15:04:13.000Z",
"country": "US",
"language": "en",
"title": "Sony Bravia 55\" KDL55EX500 1080p 120Hz LCD HDTV",
"description": "Enjoy breathtaking viewing experience with Bravia 55-inch KDL55EX500 1080p LCD HDTV from Sony®. This LCD TV features Motionflow™ 120 Hz Technology that allows you to experience smooth motion detail and clarity which delivers a crisp, fluid and realistic viewing skill during fast-action scenes. Additionally, the incorporated LightSensor™ Technology automatically increases or decreases the level of brightness of your TV's backlight based on a room's lighting conditions. Moreover, the BRAVIA Engine™ 2 fully processor lets you enjoy sharp, vibrant, life-like images while optimizing color, contrast and significantly reducing noise. Besides this, get a natural looking picture with an Ambient Sensor. Plus, you can also share your photos and music on the big screen by simply connecting your digital camera, USB-enabled MP3 player, or USB storage device directly to your HDTV's USB input. With all these features loaded into a single television the Bravia EX500 is an ideal choice to complement your digital lifestyle.var wcCpi\u003d\"A3477150\";",
"link": "http://lt.dell.com/lt/lt.aspx?CID\u003d27530&LID\u003d627063&DGC\u003dSS&DGSeg\u003dDHS&DURL\u003dhttp://accessories.us.dell.com/sna/productdetail.aspx?c\u003dus%26l\u003den%26s\u003ddhs%26cs\u003d19%26sku\u003dA3477150%26CAWELAID\u003d469727188",
"brand": "Sony",
"condition": "new",
"gtin": "00027242784932",
"gtins": [
"00027242784932"
],
"inventories": [
{
"channel": "online",
"availability": "inStock",
"price": 1348.0,
"currency": "USD"
}
],
"images": [
{
"link": "http://accessories.us.dell.com/sna/images/products/large/A3477150temp.jpg"
}
]
}
},
{
"kind": "shopping#product",
"id": "tag:google.com,2010:shopping/products/1113342/9429326904502109794",
"selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/1113342/gid/9429326904502109794",
"product": {
"googleId": "9429326904502109794",
"author": {
"name": "Walmart",
"accountId": "1113342"
},
"creationTime": "2011-03-26T23:58:51.000Z",
"modificationTime": "2011-08-04T19:42:49.000Z",
"country": "US",
"language": "en",
"title": "Sony Bravia 32\" Class 3D LED-LCD 1080p 240Hz HDTV,1.68\" ultra-Slim,",
"description": "Note: You must have a source of HD programming in order to take full advantage of the Sony Bravia 32\" Class 3D 1080p LED HDTV. Contact your local cable or satellite TV provider for details on how to upgrade.Visit the Sony Brand Shop for 3D glasses, other 3D HDTVs and more.Sony Bravia 32\" Class 3D 1080p LED HDTV 240Hz, KDL-32EX720:See It All In 3D: Engineered with advanced technologies, the EX720 Series is more than a fully-loaded HDTV with 3D. Once you slide on the active shutter glasses (sold separately), the on-screen image is precisely synchronized and delivered with the Full HD image intact for an immersive entertainment viewing experience with maximum resolution and superb clarity.Slim Design, Stunning Picture: Experience the next level of picture quality and contrast with Edge LED Backlight technology. U",
"link": "http://www.walmart.com/ip/Sony-KDL-32EX720/15780230?sourceid\u003d1500000000000003142050&ci_src\u003d14110944&ci_sku\u003d15780230",
"brand": "Sony",
"condition": "new",
"gtin": "00027242817135",
"gtins": [
"00027242817135"
],
"inventories": [
{
"channel": "online",
"availability": "inStock",
"price": 898.0,
"currency": "USD"
}
],
"images": [
{
"link": "http://i.walmartimages.com/i/p/00/02/72/42/81/0002724281713_500X500.jpg"
}
]
}
}
]
}
If I was you, I would parse the JSON as an array instead of as an object. This can be done by doing the following:
$json = json_decode($data, true);
By included the second argument in json_decode with a value of true, you get back an array. You can then do something like:
echo '<pre>';
print_r($json);
exit;
This will give you an idea of the array structure of the data and how to access the information you want. For example, to pull the title, brand, and description of each item, you'd do the following:
foreach($json['items'] as $item) {
echo 'Title: ' . $item['product']['title'] . '<br />';
echo 'Brand: ' . $item['product']['brand'] . '<br />';
echo 'Description: ' . $item['product']['description'] . '<br />';
}
To get the availability, again do a dump of the array using print_r() and figure out the best way to access it from the array.
Your JSON is a mix of arrays and objects. So array notation will not work for all items.
For example, to find the brand use:
foreach ($json->items as $item) {
var_dump($item->product->brand);
}
Codepad example
JSON specification
We can parse JSON Array like this,
<?php
$json = "[{\"name\":\"user1\",\"id\":\"940\"},{\"name\":\"user2\",\"id\":\"949\"}]";
$dec = json_decode($json);
for($idx = 0; $idx < count($dec); $idx++){
$obj = (Array)$dec[$idx];
echo $obj["name"];
}
?>
and similarly JSON Object like this,
<?php
$json = "{\"name\":\"user1\",\"id\":\"940\"}";
$dec = (Array)json_decode($json);
echo $dec["name"];
?>
You can use this json parser for seeing your content in proper format.
You can use this code:
$json = json_decode($url,true);
//you can retrieve kind, tag, id by using
$kind = $json['kind'];
$id = $json['id'];
Here, items itself will have an array that you can use this
$items[] = $json['items'];
// you can retrieve the data inside the kind array
$kind_arr = $json['items'][0][]['kind'];
//similarly you can parse all the data
This is not a JSON issue. You just need to traverse the arrays. A simple print_r($json); will show you the structure.
In your case you probably need:
foreach ($json["items"] as $item) {
foreach ($item["product"] as $key => $value) {
echo $key . " : " . $value;
}
}
The first foreach loops over the item list. And the second subarray access ["product"] will get you to the desired attributes.
$json = '{ "a1":{ "field1":"name1", "field2":age1, "field3":"country1"
},
"a2":{ "field1":"name2", "field2":age2, "field3":"country2" },
"a3":{ "field1":"name3", "field2":age3, "field3":"country3" } }';
$Array = json_decode($json, true);
foreach ($Array as $key => $value)
{
echo " $key ";
foreach ($value as $k => $val)
{
echo "$k | $val <br />";
}
}