【问题标题】:Convert text data to json format将文本数据转换为 json 格式
【发布时间】:2020-11-27 10:43:59
【问题描述】:

我想转换由 | 分隔的数据转成json格式。

共有28列数据,可以包含空格。

这是文本数据的示例。

 var str = "0000|testvalue|javascript|0|20201125|20201118|0108|01|card|08|2000|66|7|0|0|1927|string|201118000001|name|||01||00|48758984|0|||
0000|testvalue|javascript|2|20201125|20201118|0108|01|card|08|-1000|-33|-3|0|0|-964|string|201118000001|name|||01||00|48758984|0|||
0000|testvalue|javascript|2|20201125|20201118|0108|01|card|08|-1000|-33|-3|0|0|-964|string|201118000001|name|||01||00|48758984|0|||
0000|testvalue|javascript|0|20201125|20201118|08|03|cup|01|1000|300|30|0|0|670|string|201118000012|name||||||||020||28275319918925"

我想把它改成这样的json数组。

var json_array = [
{m1 : "0000", m2 : "testvalue", m3 : "javascript", m4 : "0", m5 : "20201125", m6 : "20201118", m7 : "0108", m8 : "01", m9 : "card", .................},
{m1 : "0000", m2 : "testvalue", m3 : "javascript", m4 : "2", m5 : "20201125", m6 : "20201118", m7 : "0108", m8 : "01", m9 : "card", .................},
{m1 : "0000", m2 : "testvalue", m3 : "javascript", m4 : "2", m5 : "20201125", m6 : "20201118", m7 : "0108", m8 : "01", m9 : "card", .................},
{m1 : "0000", m2 : "testvalue", m3 : "javascript", m4 : "0", m5 : "20201125", m6 : "20201118", m7 : "08",   m8 : "01", m9 : "cup", .................}
]

很难处理文本数据,留下问题。 感谢您的友好回答。

【问题讨论】:

  • 你可以用 '|' 分割字符串分隔符将所有列作为数组获取,然后迭代并构建您的 json。 CSV 到 json 库也应该有所帮助。
  • 你有 |和 |||是什么|||翻译成?
  • @D.希|是什么分隔数据|||包含空白数据

标签: javascript json


【解决方案1】:

看起来您的字符串有行,由\n 分隔(或者可能是\r\n,如果它来自Windows 系统?)。然后是列,由| 字符分隔。要将其拆分为二维数组,您可以使用以下内容:

str.split(/\r?\n/).map(x => x.split('|'));

第一次拆分会创建一个一维行数组。 .map 告诉它查看每一行,并在列分隔符处拆分。

下一步是将行数据从数组更改为对象。这可以通过在行数据中添加.reduce 来实现:

 var str = `0000|testvalue|javascript|0|20201125|20201118|0108|01|card|08|2000|66|7|0|0|1927|string|201118000001|name|||01||00|48758984|0|||
0000|testvalue|javascript|2|20201125|20201118|0108|01|card|08|-1000|-33|-3|0|0|-964|string|201118000001|name|||01||00|48758984|0|||
0000|testvalue|javascript|2|20201125|20201118|0108|01|card|08|-1000|-33|-3|0|0|-964|string|201118000001|name|||01||00|48758984|0|||
0000|testvalue|javascript|0|20201125|20201118|08|03|cup|01|1000|300|30|0|0|670|string|201118000012|name||||||||020||28275319918925`;

var result = str.split(/\r?\n/).map(x => x.split('|').reduce((a, o, i) => {
  a['m' + (i+1)] = o;
  return a;
}, {}));

console.log(JSON.stringify(result, null, 2));

【讨论】:

    【解决方案2】:

    你的数据中有|吗?

    如果没有,你可以通过扫描|来拆分数据——你知道一共有28列。

    如果有……你能保证输入是明确的吗?也许您可以编写一个正则表达式来检测行。

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2017-10-10
      • 2016-08-05
      • 1970-01-01
      • 2014-02-27
      • 2011-08-12
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      相关资源
      最近更新 更多