json 如何解析react对象的属性

ioekq8ef  于 2022-11-26  发布在  React
关注(0)|答案(2)|浏览(169)

我在react中工作,有一个resonse(ReviewerService.getReviewers()),它返回一个值数组:

0: {id: 1, firstName: 'John', lastName: 'Doe', email: 'johndoe@aol.com', responses: '{"q1":"yes","q2":"no","q3":"yes","rating":4}'}

1: {id: 2, firstName: 'bob', lastName: 'jefferson', email: 'bob@aol.com', responses: '{"q1":"bob","q2":"yes","q3":"yes","rating":5}'}.

如果this.state = { reviewers: [] } .
如何将响应数据传递给审阅者,同时解析响应属性?因此,我可以轻松地访问响应的这些属性。

class ListReviewsComponent extends Component {
  constructor(props) {
    super(props);

    this.state = {
      reviewers: [],
    };
  }

  async componentDidMount() {
    await ReviewerService.getReviewers().then((res) => {
      this.setState({ reviewers: res.data });
    });

  this.setState({ reviewers.responses: JSON.parse(this.state.reviewers.responses)}); // error
 
  }
fcg9iug3

fcg9iug31#

这行吗

async componentDidMount() {
    try {

       const res = await ReviewerService.getReviewers();

       // got the data
       const reviewers = res.data;

       // not parse the responses for each reviewer
       const mappedReviewers = reviewers?.map(reviewer => {
         try {

                const parsedResponses = JSON.parse(reviewer.responses)

                // do you need to convert parsedResponses to an array ??

               return {
                 ...reviewer,
                 responses: parsedResponses
               }
           } catch(error) {
                 return {
                 ...reviewer,
                 responses: [] //
               }
           }

         });
       
        this.setState({ reviewers: mappedReviewers})
    
      } catch (error) {
       // log errors
      } 
   }

希望这能帮助你解决这个问题

qnyhuwrf

qnyhuwrf2#

我想你的数组是由
服务器服务器
应采用json格式,在setState中设置之前进行处理或解析:

data = [ {id: 1, firstName: 'John', lastName: 'Doe', email: 'johndoe@aol.com', responses: '{"q1":"yes","q2":"no","q3":"yes","rating":4}'}
        ,{id: 2, firstName: 'bob', lastName: 'jefferson', email: 'bob@aol.com', responses: '{"q1":"bob","q2":"yes","q3":"yes","rating":5}'} ];

然后执行此操作,将数组置于json处理的对象格式中。

async componentDidMount() {
await ReviewerService.getReviewers().then((res) => {
  this.setState({ reviewers: res.data });
});

执行此操作时:

this.setState({ reviewers: res.data });

您可以将此.state.reviewers、所有列表和嵌套在其中的所有对象放到区域中。
您可以使用下面的方法访问此组件上的.state:

getResponsesOfReviewersOnArrayByIndex = (index) => {
    return this.state.reviewers[index].responses
}

或者只是通过某种方法访问,

this.state.reviewers[i].firstName

您可以尝试以下方法来更好地理解JSON解析函数:

const reviewersData = '[{"name":"neymar"}, {"name":"junior"}]';
const reviewers = JSON.parse(reviewersData);

console.log(reviewers[0].name);

在此W3Schools中查看更多JSON.parse()的示例
希望这对你有帮助。

相关问题