michaelp0730
1/19/2015 - 6:48 PM

CSV to JSON.py

# --------------------------------------------
# Title:	packApp Multis Mock Generator
# Date:	10 / 14 / 2013
#
# Desc:	A quick script to parse CSV and create structured JSON for packApp simulation
# ------------------------------------------------

import json, csv,sys

# Setup Constants and Variables
# ------------------------------------------------
slots = []

demo = {
	'F4':{'item':['activation']},
	'E2':{'item':['damaged']},
	'E3':{'item':['missing']},
	'D1':{'item':['unscannable']},
	'D5':{'slot':['PSLIP']},
	'E7':{'item':['activation','activation']},
}


def convItem(s):
	i = {}
	i['title'] = s['title']
	i['asin'] = s['asin']
	i['actions'] = {}
	i['demo'] = {}
	#if s['activation']:
	#	i['actions']['activation'] = 'true'
	return i

def main(refData):
	# Read In Reference Data
	# ------------------------------------------------
	data = [x for x in csv.DictReader(open(refData[0],'rU'))]
	# fill by slot
	for item in data:
		try:
			idx = [slot['id'] for slot in slots].index(item['slot'])
			slots[idx]['items'].append(convItem(item))
		except:
			s = {}
			s['id'] = item['slot']
			if item['box']:
				s['boxRec'] = item['box']
			s['items'] = []
			s['actions'] = {}
			s['items'].append(convItem(item))
			slots.append(s)
			continue
	# add demo conditions
	for slot,conds in demo.iteritems():
		idx = [s['id'] for s in slots].index(slot)
		for i,cond in enumerate(conds.get('item',[])):
			if cond in ['activation']:
				loc = 'actions'
			else:
				loc = 'demo'
			slots[idx]['items'][i][loc][cond] = 'true'
		for i,cond in enumerate(conds.get('slot',[])):
			i = conds['slot'].index(cond)
			slots[idx]['actions'][cond] = 'true'

	# Output & Save
	# ------------------------------------------------
	with open('data.json', 'w') as f:
		f.write(json.dumps(slots))


if __name__ == "__main__":
    main(sys.argv[1:])