【问题标题】:splitting string into an object JavaScript将字符串拆分为对象 JavaScript
【发布时间】:2019-03-08 01:39:04
【问题描述】:

我有这个字符串result:tie,player:paper,computer:paper

我猜你可以拆分成数组并创建一个对象并将其解析为一个对象,但这似乎不是一个好方法。

我怎样才能得到这个字符串作为一个对象?

let string = "result:tie,player:paper,computer:paper"

【问题讨论】:

  • 您应该在, 上拆分,然后在: 上拆分。

标签: javascript json string object


【解决方案1】:

对于这个特定的字符串,我会通过用"s 包围键和值将字符串转换为正确的 JSON,然后使用JSON.parse

const string = "result:tie,player:paper,computer:paper";
const json = '{' + string.replace(/(\w+):(\w+)/g, `"$1":"$2"`) + '}';
console.log(JSON.parse(json));

不过,理想情况下,无论为您提供什么,该字符串都应该为您提供 JSON 格式的内容,而不是强迫您使用这样的 hacky 方法来处理损坏的输入。

【讨论】:

  • 10分钟接受,纯美
  • 我将缓冲区从 python 脚本返回到 JS。不要认为我使用的库支持 JSON。
  • 这仍然是一个 X/Y 问题 - 可能有助于研究(或询问)如何在 python 端进行转换,输出对象的库不提供任何输出能力似乎很奇怪一个通用的序列化对象(即 JSON 格式)。
  • 附注:不错的技巧,但如果密钥包含非单词字符xyz@123: some value,这将失败
  • @JonasGrønbek 您能否澄清一下对象是否可以包含非单词属性/值,或者不属于键值分隔符的:s 或,s?
【解决方案2】:

, 上拆分,遍历并拆分: 上的每个字符串,并基于此创建对象键/值属性。为简单起见使用解构:

let string = "result:tie,player:paper,computer:paper";
let obj = {};
let propsArr = string.split(",");
propsArr.forEach(s => {
  var [key, value] = s.split(":");
  obj[key] = value;
});

console.log(obj);

【讨论】:

    【解决方案3】:

    , 上拆分以获得key:value 标记,将它们拆分为: 以获得键和值,并将它们添加到收集键值对的缩减对象中。

    var temp = "result:tie,player:paper,computer:paper";
    
    var obj = temp.split(',').reduce((result, token)=>{
      var [key, value] = token.split(':');
      
      result[key] = value;
      return result;
    }, {});
    
    console.log(obj);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多