Home > Mobile >  How to use map to loop over json object in react js
How to use map to loop over json object in react js

Time:09-21

I have a JSON object and I want to display it on my page but am having a problem with how to loop through the JSON object using the map function in React.

How can I display the data accessing the content of the object? Any help will be appreciated thanks in advance

My data

const product = {
  "items": {
    "page": "1",
    "real_total_results": 500,
    "total_results": 500,
    "page_size": 10,
    "pagecount": 50,
    "item": [

      {
        "title": "2022 Martin Men's Shoes Pigskin Autumn",
        "pic_url": "https://cbu01.alicdn.com/img/ibank/O1CN01iURzli2Ka1udcUHnM_!!2212881679572-0-cib.jpg",
        "promotion_price": "83.00",
        "price": "83.00",
        "sales": 223,
        "turnover": "1万 ",

      },
      {
        "title": "Single shoe summer",
        "pic_url": "https://cbu01.alicdn.com/img/ibank/O1CN01eMAlUd1GfHlfmUnE1_!!2211426400649-0-cib.jpg",
        "promotion_price": "5.30",
        "price": "5.30",
        "sales": 381884,
        "turnover": "27万 ",

      },
      {
        "title": "Men's shoes and women's shoes Beijing",
        "pic_url": "https://cbu01.alicdn.com/img/ibank/O1CN01pshk1P27HAb7t9H5i_!!2208535077771-0-cib.jpg",
        "promotion_price": "5.00",
        "price": "5.00",
        "sales": 94815,
        "turnover": "7万 ",

      },
      {
        "title": "2022 Running Shoes Sneakers",
        "pic_url": "https://cbu01.alicdn.com/img/ibank/O1CN01KNh1N31Dwk4VGdCWB_!!2863830281-0-cib.jpg",
        "promotion_price": "82.00",
        "price": "82.00",
        "sales": 16573,
        "turnover": "4万 ",
      },


    ],

  },

}

My code

<div className="row items">
            {product.items.map((values) => {
              return(   
                <div className="col-lg-3 col-md-4 col-sm-6 col-6" >
                  <span>Total: {values.total_results}</span>
                    values.item.map((val) =>{
                      return(
                        <div className="productImage">
                         <img style={{height:'100%', width: '100%'}}src={val.pic_url} alt="" />
                        </div>
                         <Link to='/' style={{textDecoration:'none', color:"#1a1a1a"}}>
                           <div className="cardDetail">
                            <div >
                              <p>{val.title}</p> 
                            </div>
                            <div>
                             <h6>¥ {val.price}</h6>
                           </div>
                           <div>
                             <h6>¥ {val.sales}</h6>
                           </div>
                       </div>
                  </Link>
                       )
                  })
                  
                  
                </div>
              )
            })}
          </div>

I want to get the page, total_results, page_size and also get item array content like the title, pic_url, prices and so on

CodePudding user response:

You cannot map on Object, So you have to wrap the product.items into Array as you can see the below code also here you can see the live example of your code.

import React from "react";

export default function App() {
  const product = {
    items: {
      page: "1",
      real_total_results: 500,
      total_results: 500,
      page_size: 10,
      pagecount: 50,
      item: [
        {
          title: "2022 Martin Men's Shoes Pigskin Autumn",
          pic_url:
            "https://cbu01.alicdn.com/img/ibank/O1CN01iURzli2Ka1udcUHnM_!!2212881679572-0-cib.jpg",
          promotion_price: "83.00",
          price: "83.00",
          sales: 223,
          turnover: "1万 "
        },
        {
          title: "Single shoe summer",
          pic_url:
            "https://cbu01.alicdn.com/img/ibank/O1CN01eMAlUd1GfHlfmUnE1_!!2211426400649-0-cib.jpg",
          promotion_price: "5.30",
          price: "5.30",
          sales: 381884,
          turnover: "27万 "
        },
        {
          title: "Men's shoes and women's shoes Beijing",
          pic_url:
            "https://cbu01.alicdn.com/img/ibank/O1CN01pshk1P27HAb7t9H5i_!!2208535077771-0-cib.jpg",
          promotion_price: "5.00",
          price: "5.00",
          sales: 94815,
          turnover: "7万 "
        },
        {
          title: "2022 Running Shoes Sneakers",
          pic_url:
            "https://cbu01.alicdn.com/img/ibank/O1CN01KNh1N31Dwk4VGdCWB_!!2863830281-0-cib.jpg",
          promotion_price: "82.00",
          price: "82.00",
          sales: 16573,
          turnover: "4万 "
        }
      ]
    }
  };


  return (
    <div className="App">
      {Array(product.items).map((values) => {
        return (
          <div className="col-lg-3 col-md-4 col-sm-6 col-6">
            <span>Total: {values.total_results}</span>
            {values.item.map((val) => (
              <>
                <div className="productImage">
                  <img
                    style={{ height: "100%", width: "100%" }}
                    src={val.pic_url}
                    alt=""
                  />
                </div>
                <Link
                  to="/"
                  style={{ textDecoration: "none", color: "#1a1a1a" }}
                >
                <div className="cardDetail">
                  <div>
                    <p>{val.title}</p>
                  </div>
                  <div>
                    <h6>¥ {val.price}</h6>
                  </div>
                  <div>
                    <h6>¥ {val.sales}</h6>
                  </div>
                </div>
                </Link>
              </>
            ))}
          </div>
        );
      })}
    </div>
  );
}

CodePudding user response:

Your product.items is not an array, so you cannot use map on it.

You're also missing brackets in the 2nd map, and you need to add a wrapper element on JSX of the 2nd map as well, I use React.Fragment in this case.

It should be like below

<div className="row items">
  <div className="col-lg-3 col-md-4 col-sm-6 col-6">
    <span>Total: {product.items.total_results}</span>
    {product.items.item.map((val) => (
      <React.Fragment>
        <div className="productImage">
          <img
            style={{ height: "100%", width: "100%" }}
            src={val.pic_url}
            alt=""
          />
        </div>
        <Link to="/" style={{ textDecoration: "none", color: "#1a1a1a" }}>
          <div className="cardDetail">
            <div>
              <p>{val.title}</p>
            </div>
            <div>
              <h6>¥ {val.price}</h6>
            </div>
            <div>
              <h6>¥ {val.sales}</h6>
            </div>
          </div>
        </Link>
      </React.Fragment>
    ))}
  </div>
</div>

CodePudding user response:

The map function is a method of the Array.prototype which means it won't work on an object

  • Related