From bce93598509a7f927eeec42d831d103040af1da7 Mon Sep 17 00:00:00 2001 From: Julia Friesel Date: Sun, 5 Aug 2018 08:42:24 +0200 Subject: [PATCH] Parse JSON from imported CSV --- components/settings.js | 40 ++++++++++++++++++++++++++++++++++++++++ package-lock.json | 30 ++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 71 insertions(+) diff --git a/components/settings.js b/components/settings.js index 0c9fa8a..d9accba 100644 --- a/components/settings.js +++ b/components/settings.js @@ -10,6 +10,7 @@ import Share from 'react-native-share' import getDataAsCsvDataUri from '../lib/export-to-csv' import { DocumentPicker, DocumentPickerUtil } from 'react-native-document-picker' import rnfs from 'react-native-fs' +import csvtojson from 'csvtojson' import styles from '../styles/index' import { settings as labels } from './labels' @@ -48,8 +49,47 @@ export default class Settings extends Component { title={labels.buttonLabel}> + + + ) } +} + +async function importData() { + let fileInfo + try { + fileInfo = await new Promise((resolve, reject) => { + DocumentPicker.show({ + filetype: [DocumentPickerUtil.allFiles()], + }, (err, res) => { + if (err) return reject(err) + resolve(res) + }) + }) + } catch (err) { + Alert.alert('There was a problem opening the file picker') + } + + let fileContent + try { + fileContent = await rnfs.readFile(fileInfo.uri, 'utf8') + } catch (err) { + Alert.alert('Could not open file') + console.log(err) + } + + let json + try { + json = await csvtojson().fromString(fileContent) + } catch(err) { + Alert.alert('Could not parse CSV file') + } + + console.log(json) } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9abb77d..056114c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2071,6 +2071,11 @@ "inherits": "2.0.1" } }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", @@ -2568,6 +2573,26 @@ "boom": "2.10.1" } }, + "csvtojson": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.8.tgz", + "integrity": "sha512-DC6YFtsJiA7t/Yz+KjzT6GXuKtU/5gRbbl7HJqvDVVir+dxdw2/1EgwfgJdnsvUT7lOnON5DvGftKuYWX1nMOQ==", + "requires": { + "bluebird": "^3.5.1", + "lodash": "^4.17.3", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -4680,6 +4705,11 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", diff --git a/package.json b/package.json index e6b0de6..0d8fbca 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "assert": "^1.4.1", + "csvtojson": "^2.0.8", "date-range": "0.0.2", "js-base64": "^2.4.8", "js-joda": "^1.8.2",