【问题标题】:How to parse a string containing equal signs to object如何解析包含对象等号的字符串
【发布时间】:2022-12-24 03:22:25
【问题描述】:

我有一个字符串变量

let stringValue = "{DATA={VERSION=1.1, STATE=true, STATUS=ONLINE}}"

我想将它解析为 result 对象,其中 result 将是:

let result = {"DATA":{"VERSION":1.1, "STATE": true, "STATUS": "ONLINE"}}

您如何将 stringValue 转换为 result 对象,以便可以访问嵌套的键?

console.log(result.DATA.STATUS)

【问题讨论】:

  • stringValue 来自哪里?是否可以首先将其生成为有效的 JSON?
  • 它来自卡夫卡。我们假设我们无法控制传入数据的格式。
  • 到目前为止,您尝试过什么来实现这一目标? stringValue 是否总是有这些“密钥”或者它们可以变化吗?此外,有些键/值对用=分隔,而一个键/值对用:分隔,这似乎很奇怪。
  • 传入的stringValue只包含=等号

标签: javascript node.js typescript


【解决方案1】:

在键和字符串值完全大写的假设下:

  • 我使用正则表达式 /[A-Z]+/g.match(regex) 来获取字符串中所有大写单词的数组。

  • 从数组中创建一个 Set 以删除重复项并避免多次对同一字符串重复下一步。

  • 然后遍历每个单词并在主字符串中将其替换为引号之间的自身。 DATA=>"DATA"

  • 然后将=替换为:

  • 最后JSON.parse(),我们得到了对象。

let stringValue = "{DATA={VERSION=1.1, STATE=true, STATUS=ONLINE}}";

let regex = /[A-Z]+/g
let objectStrings = stringValue.match(regex)
let uniqueStrings = [... new Set(objectStrings)]

uniqueStrings.forEach((string) => stringValue = stringValue.replaceAll(string, '"'+string+'"'));
stringValue  = stringValue.replaceAll('=', ':');

console.log(JSON.parse(stringValue))

Here 在 JSBin 中显示键已正确分配,没有引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多