【问题标题】:JSON return [Object][Object]JSON 返回 [对象] [对象]
【发布时间】:2025-12-23 22:40:17
【问题描述】:

我正在尝试从 json 文件中获取数据,但它总是返回 [object][object]

这里是json文件https://my-json-server.typicode.com/khanh21011999/demo/user

这里是获取数据的请求函数

export function requestGetUser() {
  return axios({
    method: 'get',
    url: 'https://my-json-server.typicode.com/khanh21011999/demo/user',
  });
}

这是我用来获取数据的方法

    function* loginSaga(action) {
        
            console.log('Saga is working')
            const getJson = yield call(requestGetUser) //same
            const getJsonData = JSON.stringify(getJson)
        
            const getJsonUsername = String(getJsonData.username)
            console.log('GetJson '+getJson)
            
        
            const getJsonPassword = String(getJsonData.password)
        
            if (String(action.data.username) === getJsonUsername) {
                if (String(action.data.password) === getJsonPassword) {
                    console.log('saga login success')
                    yield put({type: 'LOGIN_SUCCESS'})
                    SaveToAsyncStorage(action.data)
                }
                else {
                    console.log('saga password fail')
                }
            }
            else {
                console.log("saga user fail")
            }
    }
    export {loginSaga}

这样返回

奇怪的是我使用在线教程来获取数据,它可以使用(数据如上图所示)

工作方法

export function* handleGetUser(action) {
  try {
    const response = yield call(requestGetUser);  //same
    const { data } = response;
    yield put(setUser(data));
  } catch (error) {
    console.log(error);
  }
}

设置用户

export const setUser = (user) => ({
    type: actionList.SET_USER,
    user,
});

获取用户信息

export const GetUserInfo = (user, password) => {
    return{
        type: actionList.GET_USER_INFO,
        data: {user, password}, //same??
    }
};

这里是导出功能

export function* watchSaga() {
  yield takeLatest(GET_USER, handleGetUser);  //work
  yield takeLatest(GET_USER_INFO,loginSaga)   //notwork
}

一个不同的是工作方法有减速器

const initState = {
  user: undefined,
};
const User = (state = initState, action) => {
  switch (action.type) {
    case actionList.SET_USER:
      const {user} = action;
      return {...state,user};
    default:
      return state;
  }
};
export default User;

但我的方法没有,(我认为数据保存在状态操作中)

【问题讨论】:

  • 为什么是const getJsonData = JSON.stringify(getJson)?试试const getJsonData = getJson
  • 感谢您的回答,但它不起作用,它已经getJson 返回[object][object],它显示在console.log
  • 我的json格式错了吗?
  • console.log('GetJson '+getJson) 替换为 console.log(getJson) 。如果您将 json 与字符串连接,您将始终得到 GETJson[object][object]
  • 或者你可以使用这个console.log('GetJson ', getJson)

标签: reactjs react-native redux axios redux-saga


【解决方案1】:

console.log('GetJson ' + getJson); 您正在打印字符串和对象的串联。修改为console.log('GetJson ', getJson);

此外,您应该从axios.get() 方法返回res.data,请参阅Response Schema。你会得到JavaScript的普通对象,不需要使用JSON.stringify()

import axios from 'axios';

export function requestGetUser() {
  return axios({
    method: 'get',
    url: 'https://my-json-server.typicode.com/khanh21011999/demo/user',
  }).then((res) => res.data);
}

【讨论】:

  • 感谢您的回答,我看到 json 的结果很奇怪,我明白了! res.data 将返回数据,但没有它,它会返回所有包含data 的数据