将带有“ =”的字符串转换为JSON格式

时间:2020-07-23 01:25:00

标签: javascript json angular

我正在尝试将从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,但我不知道要诀。

2 个答案:

答案 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));