【问题标题】:Deserialize JSON string into array of list将 JSON 字符串反序列化为列表数组
【发布时间】:2016-08-27 22:18:10
【问题描述】:

我有一个字符串

var my_str="[(0,10),(1,15),(2,48),(3,63),(4,25),(5,95),(6,41),(7,31),(8,5),(15,2)]";

我需要将其转换为列表数组。例如,

alert(my_str[1])

将给出 1,15 的输出。

我尝试了以下方法:

var myarray = JSON.parse(my_str);

但它会抛出错误“意外令牌(在 JSON 中的位置 1”中)

【问题讨论】:

  • var myarray = JSON.parse(my_str);但它会抛出错误“意外的令牌(在位置 1 的 JSON 中”
  • 将您的评论部分也添加到问题中。这样就更清楚了。

标签: javascript arrays json string deserialization


【解决方案1】:

我试过了

var myarray = JSON.parse(my_str); 

但它会抛出错误“意外的令牌(在 JSON 中的位置 1”

所以我将字符串的结构更改为:

var my_str="[[0,10],[1,15],[2,48],[3,63],[4,25],[5,95],[6,41],[7,31],[8,5],[15,2]]";

这就像一个魅力;)

【讨论】:

    【解决方案2】:

    问题是您使用奇怪的语法来分隔内部对象。使用“[”和“]”代替“(”和“)”是合适的。 无论如何,您可以轻松地用 javascript 替换它们,并使您的结构成为字符串数组的数组。听起来有点令人毛骨悚然,但这样你就可以创建一个合法的 JSON 对象并受益于 JS 原生方法。

    var my_array = JSON.parse(my_str.replace(/\(/g,'[').replace(/\)/g,']'))
    

    您现在可以处理 my_array 对象并使用数组索引检索几个数字

    my_array[1] ---> 1,15
    

    【讨论】:

    • 是的,你说得对,我的语法不对。我更正了 n 只是使用了 Json.parse(my_str);谢谢
    【解决方案3】:

    您必须将 ( 替换为 '( 并将 ) 替换为 )' ,然后,应用 eval

    eval(arr.replace(/(/g,'\'(').replace(/)/g,')\''));
    //> ["(0,10)", "(1,15)", "(2,48)", "(3,63)", "(4,25)", "(5,95)", "(6,41)", "(7,31)", "(8,5)", "(15,2)"]
    

    【讨论】:

      【解决方案4】:

      这是一个非常幼稚的想法,但确实有效(没有 JSON.parseeval):

      var arr = my_str.replace('[(', '').replace(')]', '').split('),(');
      
      //> ["0,10", "1,15", "2,48", "3,63", "4,25", "5,95", "6,41", "7,31", "8,5", "15,2"]
      

      【讨论】:

        【解决方案5】:
        var arr = my_str.split("),(")
        arr[0] = arr[0].slice(2);
        arr[arr.length-1] = arr[arr.length-1].slice(0,-2)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-13
          • 2014-06-27
          • 1970-01-01
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多