function serializeDocColumns(doc:NotesDocument, cols?: any[]) {
	try {
		var tArr = [];
		var o = {};
		var v = doc.getColumnValues();

		if(!!cols) {
			for(var i = 0; i < v.size(); i++) {
				o[cols[i]] = v.get(i)
			}

			o["@unid"] = doc.getUniversalID();
			o["@href"] = "/" + doc.getParentDatabase().getFilePath() + "/api/data/collections/name/0/unid" + doc.getUniversalID()
			return json.stringify(o);
		} else {
			for(var i = 0; i < v.size(); i++) {
				tArr.push(v.get(i));
			}

			return json.stringify(tArr);
		}
	} catch (e) {
		print(e);
		return json.stringify({error: e.toString()});
	}
}
function serializeEntryColumns(nve:NotesViewEntry, cols?: any[], colNames?: { [key: string]: number}, dbPath?: string, parentColumns?: any, computedColumns?: any, search?: string, searchIn?: string) {
	try {
		nve.setPreferJavaDates(true);
		var tArr = [];
		var o = {};
		var v = nve.getColumnValues();
		var render = true;
		dbPath = dbPath || nve.getDocument().getParentDatabase().getFilePath();

		if(!!cols) {
			for(var i = 0; i < v.size(); i++) {
				if(search && cols[i] == searchIn) {
					//log.log(cols[i]);
					render = (json.stringify(v.get(i))+"").toLowerCase().indexOf(search) != -1
				}
				//print(cols[i])
				//print(v.get(i));
				o[cols[i]] = v.get(i)
			}

			if(!render) return null;

			o["@unid"] = nve.getUniversalID();
			o["@href"] = "/" + dbPath + "/api/data/collections/name/0/unid" + nve.getUniversalID()
			o["@position"] = nve.getPosition(".");
			o["@noteid"] = nve.getNoteID();
			o["@siblings"] = nve.getSiblingCount();
			o["@ftscore"] = nve.getFTSearchScore();
			if(!!parentColumns) {
				let tempDoc = nve.getDocument();

				try {
					o["@parent"] = getDocItems(tempDoc.getParentDatabase().getDocumentByUNID(tempDoc.getParentDocumentUNID()), parentColumns);
					//print(json.stringify(o["@parent"]));
				} catch(e) {
					print(e)
					o["@parent"] = {error: e + ""}
				}
			}
			if(!!computedColumns) {
				var ccs = {}

				for(var k in computedColumns) {
					var ccConfig = computedColumns[k];

					try {
						ccs[k] = ccConfig.instance(nve, colNames);
					} catch(e) {
						ccs[k] = e + "";
					}
				}

				o["@computed"] = ccs;
			}
			return json.stringify(o, replacer);
		} else {
			for(var i = 0; i < v.size(); i++) {
				if(search && cols[i] == searchIn) {
					//log.log(cols[i]);
					render = (json.stringify(v.get(i))+"").toLowerCase().indexOf(search) != -1
				}
				tArr.push(v.get(i));
			}

			if(!render) return null;

			tArr.push(nve.getUniversalID());
			tArr.push("/" + dbPath + "/api/data/collections/name/0/unid" + nve.getUniversalID());
			tArr.push(nve.getPosition("."));
			tArr.push(nve.getNoteID());
			tArr.push(nve.getSiblingCount());
			tArr.push(nve.getFTSearchScore());
			if(!!parentColumns) {
				let tempDoc = nve.getDocument();

				try {
					tArr.push(getDocItems(tempDoc.getParentDatabase().getDocumentByUNID(tempDoc.getParentDocumentUNID()), parentColumns));
				} catch(e) {
					tArr.push({})
				}
			}
			return json.stringify(tArr, replacer);
		}
	} catch (e) {
		print(e);
		return json.stringify({error: e.toString()});
	}
}