/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col) }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import java.text.SimpleDateFormat
import static com.intellij.openapi.util.text.StringUtil.escapeStringCharacters as escapeStr
NEWLINE = System.getProperty("line.separator")
INDENT = " "
static String tryFormatDate(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
try {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
.format(dateFormat.parse(inDate.trim()))
} catch (ignored) {
return inDate;
}
}
def printJSON(level, col, o) {
switch (o) {
case null: OUT.append("null"); break
case Number: OUT.append(FORMATTER.formatValue(o, col)); break
case Boolean: OUT.append("$o"); break
case String: OUT.append("\"${tryFormatDate(escapeStr(o))}\""); break
case Tuple: printJSON(level, o[0], o[1]); break
case Map:
OUT.append("{")
o.entrySet().eachWithIndex { entry, i ->
OUT.append("${i > 0 ? "," : ""}$NEWLINE${INDENT * (level + 1)}")
OUT.append("\"${escapeStr(entry.getKey().toString().uncapitalize())}\"")
OUT.append(": ")
printJSON(level + 1, null, entry.getValue())
}
OUT.append("$NEWLINE${INDENT * level}}")
break
case Object[]:
case Iterable:
OUT.append("[")
def plain = true
o.eachWithIndex { item, i ->
plain = item == null || item instanceof Number || item instanceof Boolean || item instanceof String
if (plain) OUT.append(i > 0 ? ", " : "")
else OUT.append("${i > 0 ? "," : ""}$NEWLINE${INDENT * (level + 1)}")
printJSON(level + 1, null, item)
}
if (plain) OUT.append("]") else OUT.append("$NEWLINE${INDENT * level}]")
break
default:
if (col != null) printJSON(level, null, FORMATTER.formatValue(o, col))
else OUT.append("$o")
break
}
}
printJSON(0, null, ROWS.transform { row ->
def map = new LinkedHashMap<String, String>()
COLUMNS.each { col ->
def val = row.value(col)
map.put(col.name(), new Tuple(col, val))
}
map
})
Created
August 6, 2019 09:55
-
-
Save virtualadrian/6828ec0122b6cebeac7c12b300e55da7 to your computer and use it in GitHub Desktop.
IntelliJ Data Extractor To JSON w. DateFormat
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment