Convert returned JSON Object Properties to (lower first) camelCase

后端 未结 18 2327
忘掉有多难
忘掉有多难 2020-12-04 21:05

I have JSON returned from an API like so:

Contacts: [{ GivenName: "Matt", FamilyName: "Berry" }]

To keep this consistent

18条回答
  •  盖世英雄少女心
    2020-12-04 21:28

    This is a great use case for axios interceptors

    Basically, define a client class and attach a before/after interceptor that converts the request/response data.

    export default class Client {
        get(url, data, successCB, catchCB) {
            return this._perform('get', url, data, successCB, catchCB);
        }
    
        post(url, data, successCB, catchCB) {
            return this._perform('post', url, data, successCB, catchCB);
        }
    
        _perform(method, url, data, successCB, catchCB) {
            // https://github.com/axios/axios#interceptors
            // Add a response interceptor
            axios.interceptors.response.use((response) => {
                response.data = toCamelCase(response.data);
                return response;
            }, (error) => {
                error.data = toCamelCase(error.data);
                return Promise.reject(error);
            });
    
            // Add a request interceptor
            axios.interceptors.request.use((config) => {
                config.data = toSnakeCase(config.data);
                return config;
            }, (error) => {
                return Promise.reject(error);
            });
    
            return axios({
                method: method,
                url: API_URL + url,
                data: data,
                headers: {
                    'Content-Type': 'application/json',
                },
            }).then(successCB).catch(catchCB)
        }
    }
    

    Here's a gist with a longer example using React/axios.

提交回复
热议问题