typeof比较不等于失败(JAVASCRIPT)

时间:2015-08-21 18:34:24

标签: json string converter

我试图将JSON对象中的任何项目转换为字符串。 JSON.stringify不起作用,因为它没有转换单个值。如果它是一个对象或数字,我希望整个对象是一个字符串。如何测试typeof是否不是字符串。我无法弄清楚为什么这不起作用......

if (typeof(value) !== 'string') {
     return String(value);
}

任何见解?完整示例如下:

    var myjson = {
"current_state":"OPEN",
"details":"Apdex < .80 for at least 10 min",
"severity":"WARN",
"incident_api_url":"https://alerts.newrelic.com/api/explore/applications/incidents/1234",
"incident_url":"https://alerts.newrelic.com/accounts/99999999999/incidents/1234",
"owner":"user name",
"policy_url":"https://alerts.newrelic.com/accounts/99999999999/policies/456",
"runbook_url":"https://localhost/runbook",
"policy_name":"APM Apdex policy",
"condition_id":987654,
"condition_name":"My APM Apdex condition name",
"event_type":"INCIDENT",
"incident_id":1234
};

function replacer(key, value) {
        if (typeof(value) !== 'string') {
            return String(value);
        }
        return value;
    }


console.log(JSON.stringify(myjson, replacer));

1 个答案:

答案 0 :(得分:0)

这实际上不是比较类型的问题。

最初使用空键和表示整个JSON对象(reference)的值调用replacer函数。由于JSON对象不是字符串,因此您的replacer函数所做的第一件事就是用字符串“[object Object]”替换整个JSON对象。

要解决此问题,请检查密钥是否确实存在。因此,您的更换器功能将如下所示:

function replacer(key, value) {
    if (key && (typeof(value) !== 'string')) {
        return String(value);
    }
    return value;
}

我还有一个工作小提琴here