JS将字符串转换为json对象

坦率

需要将字符串转换为json对象。


json对象/字符串的规则:

  1. 每次迭代加一。
  2. split('|'),这是json对象中的每一行。
  3. split('^'),这是行中的每个字段。
  4. split('〜'),这是字段中的每个子字段。
  5. 需要考虑没有子字段,字段或行
  6. 需要在Internet Explorer 11,ES6之前的版本中运行

String Example:
var str = "1863707152859270^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:25:52 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070|1863707222859280^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:27:02 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070"

尝试次数:

 var str = "1863707152859270^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:25:52 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070|1863707222859280^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:27:02 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070"
function ParseDelimList(str){
      var result=[];
      var rows = str.split('|');
    
      var tmpString3 = [];
      for(var i=0;i<rows.length;i++){
        var fields = rows[i].split('^');
    
        var tmpString2 = [];
        for(var j=0;j<fields.length;j++){
          var subfields = fields[j].split('~');
    
          var tmpString1 = [];
          for(var l=0;l<subfields.length;l++){
            var tmp1 = "{"+l+":"+subfields[l]+"},"
            tmpString1.push(tmp1);
          };
          var tmp2 = "{"+j+":"+tmpString1[j]+"},";
          tmpString2.push(tmp2);
        };
        var tmp3 = "{"+i+":"+tmpString2[i]+"},";
        tmpString3.push(tmp3);
      };
      return tmpString3;
    };
    
console.log(ParseDelimList(str))


最终结果(类似这样):

var json = [
  "1":{
    {"0":"1863707152859270"},
    {"1":"Exercise to lose weight"},
    {"2":"289169006"},
    {"3":"Reduce 20 pounds"},
    {"4":"Walk daily for one hour. Have a light dinner."},
    {"5":"5/10/2013 12:00:00 AM"},
    {"6":"1/21/2019 4:25:52 PM"},
    {"7":"Y"},
    {"8":"Frank the Tank"},
    {"9":"1/22/2019 8:50:02 AM"},
    {"10":"1/22/2019 8:50:02 AM"},
    {"11":"Frank the Tank"},
    {"12":"Abnormal LGSIL"},
    {"13":"1848065703239670"},
    {"14":"1863707006859070"},
  },
  "2":{
    {"0":"1863707152859270"},
    {"1":"Exercise to lose weight"},
    {"2":"289169006"},
    {"3":"Reduce 20 pounds"},
    {"4":"Walk daily for one hour. Have a light dinner."},
    {"5":"5/10/2013 12:00:00 AM"},
    {"6":"1/21/2019 4:25:52 PM"},
    {"7":"Y"},
    {"8":"Frank the Tank"},
    {"9":"1/22/2019 8:50:02 AM"},
    {"10":"1/22/2019 8:50:02 AM"},
    {"11":"Frank the Tank"},
    {"12":"Abnormal LGSIL"},
    {"13":"1848065703239670"},
    {"14":"1863707006859070"},
  }
];
Connexo

在这里,您准备好了JSON.stringify三重split跟随,然后带map您到达那里:

var str = "1863707152859270^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:25:52 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070|1863707222859280^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:27:02 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070";

var result = str.split('|').map(x => {
  return {
    row: x.split('^').map(y => {
      return {
        field: y.split('~').map(z => {
          return {
            subfield: z
          };
        })
      }
    })
  }
});

console.log(result);

由于您的预期结果并不完全清楚,如果有任何遗漏,请告诉我。

编辑:添加了与下面的IE 11兼容的相同解决方案:

var str = "1863707152859270^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:25:52 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070|1863707222859280^Exercise to lose weight^289169006^Reduce 20 pounds^Walk daily for one hour. Have a light dinner.^5/10/2013 12:00:00 AM^^1/21/2019 4:27:02 PM^Y^Frank the Tank^1/22/2019 8:50:02 AM^1/22/2019 8:50:02 AM^Frank the Tank^Abnormal LGSIL^1848065703239670^1863707006859070";

var result = str.split('|').map(function(x) {
  return {
    row: x.split('^').map(function(y) {
      return {
        field: y.split('~').map(function(z) {
          return {
            subfield: z
          };
        })
      }
    })
  }
});

console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章