请帮助更改嵌套在字典中的键

发布于 2025-01-27 13:10:35 字数 2738 浏览 2 评论 0原文

您好,我是JavaScript的初学者,如果您可以在数据部分中的主题消息的消息中帮助我,那将是很棒的,

topicMessage = { topic: 'some_topic', messages: [{ 'myKey': '{"data": {"my name is ":"aman", "age": 22, "my ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}' }, { 'myKey2': '{ "data": { "my name is 2": "aman", "age": 22, "my ed 2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } ' }, { "myKey3": '{"data": {"my name is 3":"aman", "age": 22, "my ed 3": "btech"}, "meta": {"myAge":24, "school":"aps"}}' } ] }

我们必须将键dash分开,而mykey,mykey2,mykey3,mykey3的价值是字符串形式,因此需要转换json。解析首先对象,然后再次将其转换回字符串,有人可以帮忙吗? 例如,用于MyKey的消息中的消息,这是一个字符串,对于键,数据,值再次为对象,这里键“我的名字为“ my-name-is”,“我的ed”,“我的ed”变为“我的我我的ed” -ED“

我正在尝试使用此

for(let i = 0; i < topicMessages.messages.length; i++){
    for(const [key, value] of Object.entries(topicMessages.messages[i])){
        for(const [key1, value1] of Object.entries(topicMessages.messages[i])){
            if(key1.includes(" ")){
                const newKey = key1.replace(/\s+/g, "-")
                topicMessages.messages[i][key]["data"][newkey] = topicMessages.messages[i][key]["data"][key1];
                delete topicMessages.messages[i][key]["data"][key1];         
}
}
}
}

期望的输出:

topicMessage = { topic: 'some_topic', messages: [{ 'myKey': '{"data": {"my-name-is ":"aman", "age": 22, "my-ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}' }, { 'myKey2': '{ "data": { "my-name-is-2": "aman", "age": 22, "my-ed-2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } ' }, { "myKey3": '{"data": {"my-name-is-3":"aman", "age": 22, "my-ed-3": "btech"}, "meta": {"myAge":24, "school":"aps"}}' } ] }

topicMessages = {
  topic: 'some_topic',
  messages: [{
    'myKey': '{"data": {"my name is ":"aman", "age": 22, "my ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }, {
    'myKey2': '{ "data": { "my name is 2": "aman", "age": 22, "my ed 2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } '
  }, {
    "myKey3": '{"data": {"my name is 3":"aman", "age": 22, "my ed 3": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }]
}

for (let i = 0; i < topicMessages.messages.length; i++) {
  for (const [key, value] of Object.entries(topicMessages.messages[i])) {
    for (const [key1, value1] of Object.entries(topicMessages.messages[i])) {
      if (key1.includes(" ")) {
        const newKey = key1.replace(/\s+/g, "-")
        topicMessages.messages[i][key]["data"][newkey] = topicMessages.messages[i][key]["data"][key1];
        delete topicMessages.messages[i][key]["data"][key1];
      }
    }
  }
}

console.log(topicMessages)

Hello I am beginner in javascript it would be great if you could help me

topicMessage = { topic: 'some_topic', messages: [{ 'myKey': '{"data": {"my name is ":"aman", "age": 22, "my ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}' }, { 'myKey2': '{ "data": { "my name is 2": "aman", "age": 22, "my ed 2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } ' }, { "myKey3": '{"data": {"my name is 3":"aman", "age": 22, "my ed 3": "btech"}, "meta": {"myAge":24, "school":"aps"}}' } ] }

here inside messaages of topicMessages in data part we have to make keys dash separated, and value for mykey, mykey2, mykey3 are in string form, so need to convert JSON.parse to object first and then again convert it back to string, can somebody please help,
eg for messages in for value of myKey, which is a string inside that for key, data, value which is again an object, here key "my name is" becomes "my-name-is", "my ed" becomes "my-ed"

I am trying to do using this,

for(let i = 0; i < topicMessages.messages.length; i++){
    for(const [key, value] of Object.entries(topicMessages.messages[i])){
        for(const [key1, value1] of Object.entries(topicMessages.messages[i])){
            if(key1.includes(" ")){
                const newKey = key1.replace(/\s+/g, "-")
                topicMessages.messages[i][key]["data"][newkey] = topicMessages.messages[i][key]["data"][key1];
                delete topicMessages.messages[i][key]["data"][key1];         
}
}
}
}

expected output:

topicMessage = { topic: 'some_topic', messages: [{ 'myKey': '{"data": {"my-name-is ":"aman", "age": 22, "my-ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}' }, { 'myKey2': '{ "data": { "my-name-is-2": "aman", "age": 22, "my-ed-2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } ' }, { "myKey3": '{"data": {"my-name-is-3":"aman", "age": 22, "my-ed-3": "btech"}, "meta": {"myAge":24, "school":"aps"}}' } ] }

topicMessages = {
  topic: 'some_topic',
  messages: [{
    'myKey': '{"data": {"my name is ":"aman", "age": 22, "my ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }, {
    'myKey2': '{ "data": { "my name is 2": "aman", "age": 22, "my ed 2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } '
  }, {
    "myKey3": '{"data": {"my name is 3":"aman", "age": 22, "my ed 3": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }]
}

for (let i = 0; i < topicMessages.messages.length; i++) {
  for (const [key, value] of Object.entries(topicMessages.messages[i])) {
    for (const [key1, value1] of Object.entries(topicMessages.messages[i])) {
      if (key1.includes(" ")) {
        const newKey = key1.replace(/\s+/g, "-")
        topicMessages.messages[i][key]["data"][newkey] = topicMessages.messages[i][key]["data"][key1];
        delete topicMessages.messages[i][key]["data"][key1];
      }
    }
  }
}

console.log(topicMessages)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美羊羊 2025-02-03 13:10:35

它很丑陋,但可以

看一看

const topicMessage = {
  topic: 'some_topic',
  messages: [{
    'myKey': '{"data": {"my name is ":"aman", "age": 22, "my ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }, {
    'myKey2': '{ "data": { "my name is 2": "aman", "age": 22, "my ed 2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } '
  }, {
    "myKey3": '{"data": {"my name is 3":"aman", "age": 22, "my ed 3": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }]
}


const renameKeys = (data) =>
  data.map(o =>
    Object.keys(o).reduce((res, k) => {
      const json = o[k]
      const {data, ...rest} = JSON.parse(json)

      return {
        ...res,
        [k]: JSON.stringify({
          ...rest,
          data: Object.keys(data).reduce((res, key) => {
            return {
              ...res,
              [key.replace(/\s+/g, "-")]: data[key]
            }
          }, {})
        })
      }
    }, {})
  )





topicMessage.messages = renameKeys(topicMessage.messages)

console.log(topicMessage)

It came out pretty ugly but it works

take a look

const topicMessage = {
  topic: 'some_topic',
  messages: [{
    'myKey': '{"data": {"my name is ":"aman", "age": 22, "my ed": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }, {
    'myKey2': '{ "data": { "my name is 2": "aman", "age": 22, "my ed 2": "btech" }, "meta": { "myAge2": 24, "school": "aps" } } '
  }, {
    "myKey3": '{"data": {"my name is 3":"aman", "age": 22, "my ed 3": "btech"}, "meta": {"myAge":24, "school":"aps"}}'
  }]
}


const renameKeys = (data) =>
  data.map(o =>
    Object.keys(o).reduce((res, k) => {
      const json = o[k]
      const {data, ...rest} = JSON.parse(json)

      return {
        ...res,
        [k]: JSON.stringify({
          ...rest,
          data: Object.keys(data).reduce((res, key) => {
            return {
              ...res,
              [key.replace(/\s+/g, "-")]: data[key]
            }
          }, {})
        })
      }
    }, {})
  )





topicMessage.messages = renameKeys(topicMessage.messages)

console.log(topicMessage)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文