【问题标题】:Render a table with a json array in Reactjs在 Reactjs 中使用 json 数组渲染表格
【发布时间】:2021-06-08 15:17:46
【问题描述】:

我需要在 React 的页面上显示下面的 jsonArray。

[{
    "machine1": [{

            "Image": "mysql:latest",
            "Names": "mysql",
            "Status": "Restarting (1) 18 seconds ago"
        },
        {
            "Image": "kafka:latest",
            "Names": "kafka",
            "Status": "Up 15 hours"
        },
        {
            "Image": "postgresql:latest",
            "Names": "postgresql",
            "Status": "Restarting (1) 18 seconds ago"
        }
    ]
},
{
    "machine2": [{
            "Image": "mysql:latest",
            "Names": "mysql",
            "Status": "Restarting (1) 18 seconds ago"
        },
        {
            "Image": "elasticsearch:latest",
            "Names": "elasticsearch",
            "Status": "Up 15 hours"
        }
    ]
}
]

以下格式的东西。 机器名称 |图像列表 |名单 |状态列表

我已经设法从下面的 json 中显示数据:

 {"parsedBody": [{

            "Image": "mysql:latest",
            "Names": "mysql",
            "Status": "Restarting (1) 18 seconds ago"
        },
        {
            "Image": "kafka:latest",
            "Names": "kafka",
            "Status": "Up 15 hours"
        },
        {
            "Image": "postgresql:latest",
            "Names": "postgresql",
            "Status": "Restarting (1) 18 seconds ago"
        }
    ]
   }

以下是我当前的代码:

import React, { Component } from 'react';
import axios from 'axios';

class DockerProcess extends Component {
constructor() {
    super();
    this.state = {
        d_processes: { "parsedBody": [{ "Image": "placeholder_image", "Names": "placeholder_name" }] }
    };
}
handleButtonClick = () => {
    axios.get("/getDockerProcesses").then(response => {
        console.log(response.data);
        this.setState({
            d_processes: response.data
        });
    });
};
render() {
    return (
        <div>
            <button onClick={this.handleButtonClick}>Get Docker Processes</button>
            <ul>
                {this.state.d_processes.parsedBody.map((item, i) => {
                    return <li key={i}>{item.Names}</li>
                })}
            </ul>
        </div>
    );
}
}

export default DockerProcess;

目前,我知道 json 键是“parsedBody”,但是如果您看到我在这里提到的第一个 json 主体,这就是我想要实现的,并且键是不同的,即机器名称,例如 machine1, machine2等

我是前端开发的新手,所以一些技巧会有所帮助。谢谢。

【问题讨论】:

  • 您可以使用与索引连接的“机器”。
  • 您能否发布您已设法显示的代码。我会在此基础上尽力帮助您
  • @AbdulhakimZeinu。我已经在问题中发布了。谢谢。
  • @SowmiyaP 'machine1' 只是一个示例。实际名称完全不同。
  • 能否给个完整的代码。我会努力解决的

标签: arrays json reactjs axios


【解决方案1】:

在这里,我通过删除机器名称修改了您的 JSON 数组。但是仍然有一种方法可以区分机器。

    let arr = [
     [
        {    
            "Image": "mysql:latest",
            "Names": "mysql",
            "Status": "Restarting (1) 18 seconds ago"
        },
        {
            "Image": "kafka:latest",
            "Names": "kafka",
            "Status": "Up 15 hours"
        },
        {
            "Image": "postgresql:latest",
            "Names": "postgresql",
            "Status": "Restarting (1) 18 seconds ago"
        }
    ],
    [
        {
            "Image": "mysql:latest",
            "Names": "mysql",
            "Status": "Restarting (1) 18 seconds ago"
        },
        {
            "Image": "elasticsearch:latest",
            "Names": "elasticsearch",
            "Status": "Up 15 hours"
        }
    ]    
]

然后这里是如何遍历它以显示每个项目

   <ul>
      { 
        arr.map((items, i) => {      
          return <div>{ 
            items.map((item, i) => {
              return <li key={i}>{item.Names+",  "+ item.Image}</li>
            })  }
             <h4>Next machine</h4></div>
         })
      }
   </ul>

您可以在 Codesandbox 上查看输出的行为方式

【讨论】:

  • 非常感谢。我已经使用了您的解决方案,而且我已经更新了 json 结构,以便在 json 中的每个对象中都有一个名为“machine”的键,其值作为实际的机器名称,然后是另一个名为“processes”的键,其中包含过程。我已经达到了我想要的。再次感谢。
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2019-08-04
相关资源
最近更新 更多