in src/org/jetbrains/plugins/ipnb/format/IpnbParser.java [545:606]
public IpnbFileRaw deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject object = json.getAsJsonObject();
IpnbFileRaw fileRaw = new IpnbFileRaw();
JsonElement worksheets = object.get("worksheets");
if (worksheets != null) {
fileRaw.worksheets = gson.fromJson(worksheets, new TypeToken<List<IpnbWorksheet>>(){}.getType());
}
JsonElement cellsElement = object.get("cells");
if (cellsElement != null) {
fileRaw.cells = gson.fromJson(cellsElement, new TypeToken<List<IpnbCellRaw>>(){}.getType());
}
JsonElement metadataElement = object.get("metadata");
if (metadataElement != null) {
LinkedTreeMap<String, Object> metadataMap = gson.fromJson(metadataElement, new TypeToken<Map<String, Object>>(){}.getType());
JsonElement kernelInfo = metadataElement.getAsJsonObject().get("kernel_info");
if (kernelInfo != null) {
metadataMap.put("kernel_info", gson.fromJson(kernelInfo, new TypeToken<Map<String, String>>() {}.getType()));
}
JsonElement languageInfo = metadataElement.getAsJsonObject().get("language_info");
if (languageInfo != null) {
LinkedTreeMap<String, Object> languageInfoMap = gson.fromJson(languageInfo, new TypeToken<Map<String, Object>>() {}.getType());
JsonElement codemirrorMode = languageInfo.getAsJsonObject().get("codemirror_mode");
if (codemirrorMode != null) {
LinkedTreeMap<String, Object> codemirrorModeMap = gson.fromJson(codemirrorMode, new TypeToken<Map<String, String>>() {}.getType());
if (codemirrorModeMap.containsKey("version")) {
String version = (String)codemirrorModeMap.get("version");
if (NumberUtils.isNumber(version)) {
try {
codemirrorModeMap.put("version", Integer.parseInt(version));
}
catch (NumberFormatException e) {
// added this to obtain backward compatibility as previously we parsed "version" as double.
codemirrorModeMap.put("version", (int) Double.parseDouble(version));
}
}
}
languageInfoMap.put("codemirror_mode", codemirrorModeMap);
}
metadataMap.put("language_info", languageInfoMap);
}
fileRaw.metadata = metadataMap;
}
JsonElement nbformat = object.get("nbformat");
if (nbformat != null) {
fileRaw.nbformat = nbformat.getAsInt();
}
JsonElement nbformatMinor = object.get("nbformat_minor");
if (nbformatMinor != null) {
fileRaw.nbformat_minor = nbformatMinor.getAsInt();
}
return fileRaw;
}