我正在尝试将从API返回的字符串转换为Angular中的JSON对象。
问题在于该字符串未规范化以便轻松地解析为JSON。
这是我正在使用的字符串:
"{rootCause=EJBusinessException: This is a sample exception thrown for testing additional info field, description=This is a more detailed description about the incident., stackTrace=com.springboot.streams.infrastructure.web.heartbeat.HeartbeatService.testServiceNow(HeartbeatService.java:200)}"
尝试执行JSON.parse(myStr)
时,由于无效的字符串格式而引发错误。
是否有一种简单的方法可以将列出的字符串转换为更正确的JSON格式,摆脱'='并将其替换为':'。
它不仅具有.replace(/['"]+/g, '')
的功能,甚至还不能将字符串转换成JSON。
希望有人精通Java,但我不知道要诀。
答案 0 :(得分:2)
您只需要在解析字符串之前对其进行处理,即可删除可能导致对象错误的不必要的字符串,例如“ {”和“}”,然后将其按“”进行分割。
var obj = {}, str = "{rootCause=EJBusinessException: This is a sample exception thrown for testing additional info field, description=This is a more detailed description about the incident., stackTrace=com.springboot.streams.infrastructure.web.heartbeat.HeartbeatService.testServiceNow(HeartbeatService.java:200)}"
str.split(",").forEach((st, i) => {
pair = st.split("=")
if(pair.length > 1) {
obj[pair[0].replace("{",'').replace("}", '').trim()] = pair[1]
} else {
obj[i] = pair
}
})
console.log(obj)
答案 1 :(得分:1)
正如评论者所发表的那样,除非您控制API或至少拥有输出始终将遵循特定格式的文档,否则您的工作能力有限。在当前示例中,不过,您可以修剪多余的位以获取实际数据...(删除花括号,以逗号分隔,以等号分隔)以获取key:value对...然后从头开始构建javascript对象带有数据...如果此时需要json字符串,则只需JSON.stringify()
var initialString = "{rootCause=EJBusinessException: This is a sample exception thrown for testing additional info field, description=This is a more detailed description about the incident., stackTrace=com.springboot.streams.infrastructure.web.heartbeat.HeartbeatService.testServiceNow(HeartbeatService.java:200)}"
var trimmedString = initialString.substr(1, initialString.length - 2);
var pairArray = trimmedString.split(',');
var objArray = [];
pairArray.forEach(pair => {
var elementArray = pair.split('=');
var obj = {
key: elementArray[0].trim(),
value: elementArray[1].trim()
};
objArray.push(obj);
});
var returnObj = {};
objArray.forEach(element => {
returnObj[element.key] = element.value;
});
console.log(JSON.stringify(returnObj));