简体   繁体   中英

Convert text data to json format

I want to convert data separated by |to json format.

There are a total of 28 columns of data and can contain blanks.

This is an example of text data.

 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"

I want to change it to a json array like this.

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", .................}
]

It is difficult to process textual data, leaving questions. Thank you for your kind answer.

It looks like your string has rows, separated by \n (or possibly \r\n , if it's from a windows system?). And then columns, separated by the |character. To split this into a two dimensional array, you can use the following:

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

The first split creates a 1d array of rows. The .map tells it to look at each row, and split on the column delimiter.

The next step is to change the row data from an array to an object. This can be accomplished by adding a .reduce to the row data:

 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));

Is there any | in your data?

If there is not, you could just split the data by scanning the | —— you have known that there are 28 columns in total.

If there are... Could you guarantee that the input is unambiguous? Maybe you could write a regex to detect rows.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM