代码之家  ›  专栏  ›  技术社区  ›  HUNG

如何将字符串“opt01”、“opt'02”、“op,t03”更改为数组

  •  -3
  • HUNG  · 技术社区  · 8 年前
    { data1: "'opt01', 'opt\'02', 'op,t03'", data2: "plaintext"}
    

    我有上面返回的json数据。

    如何通过数组格式获取数据1以便逐个循环数据?

    4 回复  |  直到 8 年前
        1
  •  1
  •   Kosh    8 年前

    如果数据源可靠,则可以使用 eval .
    如果不可靠,请先检查数据。

    var d = { data1: "'opt1', 'op,t2', 'op\\'t3'", data2: "plaintext"};
    
    d.data1 = eval(`[${d.data1}]`);
    
    console.log(d);

    但最好的解决方案是按照@JohnMontgomery的建议修复数据源。

        2
  •  1
  •   bcr666    8 年前

    如果data1中的每个字符串都是单引号分隔的

    var data1 = jsonData.data1;
    data1 = data1.substring(1).slice(-1); // get rid of the leading and trailing '
    var strings = data1.split("', '"); // split on the actual delimiter, not just the ,.
    
        3
  •  1
  •   Lobster Fighter    8 年前

    const obj = {data1: "'opt1', 'opt2', 'opt3'", data2: "plaintext"}    
    const array = obj.data1.replace(/'/g,'').split(', ')
    console.log(array)
        4
  •  1
  •   Tyler Roper    8 年前

    如果将字符串用方括号括起来,并用双引号替换单引号,则会得到一个有效的JSON字符串。在那一点上, JSON.parse() 会把它变成一个真正的数组。

    var obj = { data1: "'opt1', 'opt2', 'opt3'", data2: "plaintext"};
    
    var strData = "[" + obj.data1.replace(/'/g, "\"") + "]";
    var arrData = JSON.parse(strData);
    console.log(arrData);

    或者使用模板文本。。。

    var obj = { data1: "'opt1', 'opt2', 'opt3'", data2: "plaintext"};
    
    var strData = `[${obj.data1.replace(/'/g, "\"")}]`;
    var arrData = JSON.parse(strData);
    console.log(arrData);

    我建议这件事超出标准的唯一原因 split("', '") 如果数据返回时没有空格( data1: "'opt1','opt2','opt3'" ),和 parse 仍然有效,但是 split 不会(除非你做了一个类似的替换,并删除了空间,以确保安全)。

    也就是说,如果这不是一个可能的场景,两种方法都可以工作。