Example usage for com.google.gson.stream JsonReader skipValue

List of usage examples for com.google.gson.stream JsonReader skipValue

Introduction

In this page you can find the example usage for com.google.gson.stream JsonReader skipValue.

Prototype

public void skipValue() throws IOException 

Source Link

Document

Skips the next value recursively.

Usage

From source file:controllers.ParseController.java

@RequestMapping("/addFile")
public String addFile(Map<String, Object> model, @RequestParam("newFile") MultipartFile file)
        throws IOException {
    File newFile = new File("/usr/local/etc/newFile");
    if (!newFile.exists()) {
        FileUtils.writeByteArrayToFile(newFile, file.getBytes());
    } else {/*  w ww  . j  a  va  2 s. co m*/
        newFile.delete();
        FileUtils.writeByteArrayToFile(newFile, file.getBytes());
    }
    if (newFile.exists()) {
        JsonReader reader = new JsonReader(new FileReader(newFile));
        try {
            reader.beginObject();
            while (reader.hasNext()) {
                String objectName = reader.nextName();
                if (objectName.equals("colors")) {
                    reader.beginObject();
                    while (reader.hasNext()) {
                        String colorNameId = reader.nextName();
                        reader.beginObject();
                        Long oldColorId = Long.valueOf("0");
                        String title = "0";
                        String titleEng = "0";
                        while (reader.hasNext()) {
                            String objectField = reader.nextName();
                            if (objectField.equals("id")) {
                                oldColorId = reader.nextLong();
                            }
                            if (objectField.equals("title")) {
                                title = reader.nextString();
                            }
                            if (objectField.equals("title_eng")) {
                                titleEng = reader.nextString();
                            }
                            if (objectField.equals("aliases")) {
                                String oldId = "";
                                String name = "";
                                if (reader.peek().equals(JsonToken.BEGIN_ARRAY)) {
                                    reader.beginArray();
                                    reader.endArray();
                                    oldId = "0";
                                    name = "? ";

                                    Color c = new Color();
                                    c.setName(name);
                                    c.setTitle(title);
                                    c.setTitleEng(titleEng);
                                    c.setOldGroupId(oldColorId);
                                    c.setOldId(Long.valueOf(oldId));

                                    colorService.createColor(c);
                                    //keys.add(oldColorId + " - " + title + " - " + titleEng + " - " + oldId + " - " + name);

                                } else {
                                    reader.beginObject();
                                    while (reader.hasNext()) {
                                        oldId = reader.nextName();
                                        name = reader.nextString();
                                        Color c = new Color();
                                        c.setName(name);
                                        c.setTitle(title);
                                        c.setTitleEng(titleEng);
                                        c.setOldGroupId(oldColorId);
                                        c.setOldId(Long.valueOf(oldId));

                                        colorService.createColor(c);
                                        //keys.add(oldColorId + " - " + title + " - " + titleEng + " - " + oldId + " - " + name);
                                    }
                                    reader.endObject();
                                }
                            }
                        }
                        reader.endObject();
                    }
                    reader.endObject();
                } else if (objectName.equals("color_groups")) {
                    reader.beginObject();
                    while (reader.hasNext()) {
                        String colorGroupNameId = reader.nextName();
                        reader.beginObject();
                        Long oldGroupId = Long.valueOf("0");
                        String title = "";
                        while (reader.hasNext()) {
                            String objectField = reader.nextName();
                            if (objectField.equals("id")) {
                                oldGroupId = reader.nextLong();
                            } else if (objectField.equals("title")) {
                                title = reader.nextString();
                            } else if (objectField.equals("aliases")) {
                                reader.beginObject();
                                while (reader.hasNext()) {
                                    String oldId = reader.nextName();
                                    String name = reader.nextString();
                                    ColorGroup cg = new ColorGroup();
                                    cg.setName(name);
                                    cg.setTitle(title);
                                    cg.setOldGroupId(oldGroupId);
                                    cg.setOldId(Long.valueOf(oldId));

                                    colorGroupService.createColorGroup(cg);
                                    //keys.add(oldGroupId + " - " + title + " - " + oldId + " - " + name);
                                }
                                reader.endObject();
                            }
                        }
                        reader.endObject();
                    }
                    reader.endObject();
                    //keys.add(name);
                } else if (objectName.equals("features")) {
                    reader.beginObject();
                    while (reader.hasNext()) {
                        String featureNameId = reader.nextName();
                        reader.beginObject();
                        Long featureId = Long.valueOf("0");
                        String title = "";
                        String description = "";
                        Long cmgId = null;
                        Long ccoId = null;
                        String media = "";
                        while (reader.hasNext()) {
                            String objectField = reader.nextName();
                            if (objectField.equals("id")) {
                                featureId = reader.nextLong();
                            } else if (objectField.equals("title")) {
                                title = reader.nextString();
                            } else if (objectField.equals("description")) {
                                description = reader.nextString();
                            } else if (objectField.equals("car_model_generation_id")) {
                                if (!reader.peek().equals(JsonToken.NULL)) {
                                    cmgId = reader.nextLong();
                                } else {
                                    reader.skipValue();
                                }
                            } else if (objectField.equals("car_completion_option_id")) {
                                if (!reader.peek().equals(JsonToken.NULL)) {
                                    ccoId = reader.nextLong();
                                } else {
                                    reader.skipValue();
                                }
                            } else if (objectField.equals("media")) {
                                //reader.skipValue();
                                if (reader.peek().equals(JsonToken.BEGIN_OBJECT)) {
                                    reader.beginObject();
                                    while (reader.hasNext()) {
                                        if (reader.peek().equals(JsonToken.NAME)) {
                                            String mediaName = reader.nextName();
                                            media += mediaName + " : [ ";
                                            reader.beginArray();
                                            while (reader.hasNext()) {
                                                media += " { ";
                                                reader.beginObject();
                                                while (reader.hasNext()) {
                                                    String mediaParamName = reader.nextName();
                                                    media += mediaParamName + " : ";
                                                    if (!mediaParamName.equals("url")) {
                                                        if (!reader.peek().equals(JsonToken.NULL)) {
                                                            media += reader.nextString();
                                                        } else {
                                                            reader.skipValue();
                                                            media += "null";
                                                        }
                                                    } else {
                                                        reader.beginObject();
                                                        media += "{";
                                                        while (reader.hasNext()) {
                                                            media += reader.nextName() + " : "
                                                                    + reader.nextString();
                                                        }
                                                        media += "}";
                                                        reader.endObject();
                                                    }
                                                }
                                                reader.endObject();
                                                media += " } ";
                                            }
                                            reader.endArray();
                                            media += " ] ";
                                        }
                                    }
                                    reader.endObject();
                                } else {
                                    reader.skipValue();
                                }
                            }

                        }
                        reader.endObject();
                        Feature f = new Feature();
                        f.setOldId(featureId);
                        f.setTitle(title);
                        f.setDescription(description);
                        f.setCmgId(cmgId);
                        f.setCcoId(ccoId);
                        f.setMedia(media);

                        //keys.add(featureId + " - " + title + " - " + description + " - " + cmgId + " - " + ccoId + " - " + media);
                        featureService.createFeature(f);
                    }
                    reader.endObject();
                } else {
                    reader.skipValue();
                }
            }
            reader.endObject();
            reader.close();
        } catch (Exception e) {
            model.put("error", "? ?  :"
                    + StringAdapter.getStackTraceException(e));
            reader.close();
            return "ParseShow";
        }
    }
    return "redirect:/ParseController/show";
}

From source file:data.Task1bData.java

License:Apache License

public void readData(String jsonFile) throws IOException {

    int num_questions = 0;
    int num_triples = 0;
    int type_yesno = 0;
    int type_factoid = 0;
    int type_list = 0;
    int type_summary = 0;

    try {//from w  w w . j  a va  2 s .  c  o  m
        JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(jsonFile)));
        //reader.setLenient(true);
        //    JsonToken peeknext = reader.peek();
        //    peeknext.

        reader.beginObject();
        while (reader.hasNext()) {

            String nextfield = reader.nextName();
            if (nextfield.equals("questions")) {
                reader.beginArray();
                while (reader.hasNext()) {

                    reader.beginObject();
                    num_questions++;

                    Question qst = new Question();

                    while (reader.hasNext()) {
                        String name = reader.nextName();
                        int k = 0;
                        if (name.equals("body")) {
                            String body = reader.nextString();
                            qst.setBody(body);
                        } else if (name.equals("triples")) {
                            num_triples++;
                            ArrayList<Triple> triples = readTriplesArray(reader);
                            qst.addTriples(triples);
                        } else if (name.equals("type")) {
                            String type = reader.nextString();

                            if (type.equals("yesno")) {
                                qst.setType(Question.YESNO);
                                type_yesno++;

                            } else if (type.equals("factoid")) {
                                qst.setType(Question.FACTOID);
                                type_factoid++;

                            }
                            if (type.equals("summary")) {
                                qst.setType(Question.SUMMARY);
                                type_summary++;

                            }
                            if (type.equals("list")) {
                                qst.setType(Question.LIST);
                                type_list++;

                            }
                        } else if (name.equals("id")) {
                            String id = reader.nextString();
                            qst.setId(id);
                        } else if (name.equals("concepts")) {
                            ArrayList<String> concepts = readConcepts(reader);
                            qst.addConcepts(concepts);
                        } else if (name.equals("documents")) {
                            ArrayList<String> docs = readDocuments(reader);

                            qst.addDocuments(docs);
                        } else if (name.equals("exact_answer")) {
                            ExactAnswer ea = new ExactAnswer();
                            JsonToken peek = reader.peek();
                            if (peek == JsonToken.BEGIN_ARRAY) //list or factoid
                            {
                                reader.beginArray();

                                JsonToken peek1 = reader.peek();
                                ArrayList<String> listOfAnswers = new ArrayList<String>();
                                ArrayList<ArrayList<String>> listofarrays = new ArrayList<ArrayList<String>>();

                                if (peek1 == JsonToken.BEGIN_ARRAY) // list (or factoid-list since BioASQ3)
                                {
                                    /*
                                     * Warning: changed the following for BioASQ 5
                                     * No synonyms in submissions anymore, only in gold files
                                    */
                                    if (VERSION_OF_CHALLENGE == evaluation.EvaluatorTask1b.BIOASQ2
                                            || VERSION_OF_CHALLENGE == evaluation.EvaluatorTask1b.BIOASQ3) {
                                        listofarrays = readExactAnswerListOfArraysv2(reader);
                                        ea.setLists(listofarrays);
                                    } else if (VERSION_OF_CHALLENGE == evaluation.EvaluatorTask1b.BIOASQ5) {
                                        if (!this.isGold) { // For submissions use restricted parsing : only first of synonyms taken into account
                                            listofarrays = readExactAnswerListOfArraysv3(reader);
                                        } else { // For golden read all synonyms normally
                                            listofarrays = readExactAnswerListOfArraysv2(reader);
                                        }
                                        ea.setLists(listofarrays);
                                    } else {
                                        System.out.println("Wrong challenge version. I will exit.");
                                        System.exit(0);
                                    }
                                } else if (peek1 == JsonToken.STRING) // factoid (for BioASQ1&2)
                                {
                                    /*
                                     * Warning: changed the following for BioASQ 3
                                     * we now have list of arrays for factoid 
                                    */
                                    if (VERSION_OF_CHALLENGE == evaluation.EvaluatorTask1b.BIOASQ2) {
                                        listOfAnswers = readExactAnswerArray(reader);
                                        ea.setAnswers(listOfAnswers);
                                    }
                                    //not reached!
                                    else if (VERSION_OF_CHALLENGE == evaluation.EvaluatorTask1b.BIOASQ3) {
                                        listofarrays = readExactAnswerListOfArraysv2(reader);
                                        ea.setLists(listofarrays);
                                    }
                                    /*
                                     * Warning: changed the following for BioASQ 5
                                     * No synonyms are submitted anymore by participants
                                    */
                                    //not reached!
                                    else if (VERSION_OF_CHALLENGE == evaluation.EvaluatorTask1b.BIOASQ5) {
                                        listofarrays = readExactAnswerListOfArraysv3(reader);
                                        ea.setLists(listofarrays);
                                    } else {
                                        System.out.println("Wrong challenge version. I will exit.");
                                        System.exit(0);
                                    }
                                }

                                //ea.setAnswers(listOfAnswers);
                                qst.setExact_answer(ea);
                                reader.endArray();

                            } else if (peek == JsonToken.STRING) //yesno
                            {
                                String yesno_answer = reader.nextString();
                                yesno_answer = yesno_answer.toLowerCase();
                                if (yesno_answer.contains("yes"))
                                    ea.setAnswer("yes");
                                else if (yesno_answer.contains("no"))
                                    ea.setAnswer("no");
                                else {
                                    ea.setAnswer("none");
                                    //  System.out.println("Unknown answer in yesno question: "+yesno_answer);
                                }
                                qst.setExact_answer(ea);
                            }

                        }

                        //                      Edited for BioASQ4 Evaluation (to solve format conflict with Rouge.py)            
                        //                      ideal answers are not evaluated with this code, so no need to read them(Rouge and manual queration is used instead)

                        //                      else if(name.equals("ideal_answer"))
                        //                      {
                        //                          String ideal="";
                        //                          try{ideal = reader.nextString();}catch(IllegalStateException ex){System.out.println(ex.toString());System.out.println(jsonFile);
                        //                          }
                        //                          qst.setIdeal_answer(ideal);
                        //                      }
                        else if (name.equals("snippets")) {
                            ArrayList<Snippet> snippets = readSnippets(reader);
                            qst.addSnippets(snippets);
                        } else {
                            reader.skipValue();

                        }
                    }
                    //reader.skipValue();
                    reader.endObject();
                    this.questions.add(qst);

                }
                reader.endArray();
            } else {
                reader.skipValue();

            }
        }
        reader.endObject();
        /*     System.out.println("Number of questions:"+num_questions);
             System.out.println("Number of triples:"+num_triples);
             System.out.println("Number of yesno:"+type_yesno);
             System.out.println("Number of factoid:"+type_factoid);
             System.out.println("Number of list:"+type_list);
             System.out.println("Number of summary:"+type_summary);*/

    } catch (FileNotFoundException ex) {
        System.out.println("Problem in JSONfile : " + jsonFile);
    }

}

From source file:data.Task1bData.java

License:Apache License

private ArrayList<Triple> readTriplesArray(JsonReader reader) {

    ArrayList<Triple> triples = new ArrayList<Triple>();

    try {/*from  w ww  .ja  v a  2  s  .co  m*/
        reader.beginArray();
        while (reader.hasNext()) {

            reader.beginObject();
            String op = "", pre = "", sub = "";
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("o")) {
                    JsonToken peek = reader.peek();
                    if (peek.equals(JsonToken.NULL)) {
                        op = "";
                        reader.nextNull();
                    } else
                        op = reader.nextString();
                } else if (name.equals("p")) {
                    pre = reader.nextString();
                } else if (name.equals("s")) {
                    JsonToken peek = reader.peek();
                    if (peek.equals(JsonToken.NULL)) {
                        sub = "";
                        reader.nextNull();

                    } else
                        sub = reader.nextString();
                } else
                    reader.skipValue();
            }
            Triple tr = new Triple(pre, sub, op);
            reader.endObject();
            triples.add(tr);
        }
        reader.endArray();
    } catch (IOException ex) {
    }

    return triples;
}

From source file:data.TaskADataParser.java

License:Apache License

public static PubMedDocument getNextDocument(JsonReader reader) {
    String text = null;//from   ww w.j a va  2 s  . c  om
    String title = null;
    String pmid = null;
    String journal = null;
    String[] meshMajor = null;

    try {
        if (reader.hasNext()) {
            reader.beginObject();

            while (reader.hasNext()) {
                String name = reader.nextName();

                if (name.equals("abstractText")) {

                    text = reader.nextString();

                } else if (name.equals("journal")) {
                    journal = reader.nextString();

                } else if (name.equals("meshMajor")) {
                    meshMajor = readLabelsArray(reader);

                } else if (name.equals("pmid")) {
                    pmid = reader.nextString();
                } else if (name.equals("title")) {
                    title = reader.nextString();
                } else if (name.equals("year")) {
                    reader.skipValue();
                } else {
                    System.out.println(name);
                    reader.skipValue();
                }
            }
            reader.endObject();
        }
    } catch (Exception ex) {
    }

    return new PubMedDocument(text, title, pmid, journal, meshMajor);
}

From source file:de.dentrassi.eclipse.provider.eclipse.ValueAdapter.java

License:Open Source License

@Override
public String read(final JsonReader in) throws IOException {
    if (in.peek() == JsonToken.NULL) {
        return null;
    }//from  w w w . j a  v a2s .  c o  m

    String result = null;
    in.beginArray();
    while (in.hasNext()) {
        in.beginObject();
        while (in.hasNext()) {
            final String name = in.nextName();
            if ("value".equals(name)) {
                result = in.nextString();
            } else {
                in.skipValue();
            }
        }
        in.endObject();
    }
    in.endArray();

    return result;
}

From source file:de.loercher.geomodule.cloudant.CloudantGeoSearchStream.java

private void extractEntities(BufferedReader bufferedReader) throws JSONParseException {
    JsonReader reader = new JsonReader(bufferedReader);
    try {// w  w w .j  a v a  2  s  .  c  o  m
        reader.beginObject();

        String arrayName = null;
        while (reader.hasNext() && !("features".equals(arrayName))) {
            arrayName = reader.nextName();
            if ("bookmark".equals(arrayName)) {
                bookmark = reader.nextString();
            } else if (!("features".equals(arrayName))) {
                reader.skipValue();
            }
        }

        if ("features".equals(arrayName)) {
            reader.beginArray();

            while (reader.hasNext()) {
                Gson gson = new Gson();
                CloudantArticleEntity entity = gson.fromJson(reader, CloudantArticleEntity.class);

                // Duplicates should not be returned
                if (!(alreadyAvailableIds.contains(entity.getId()))) {
                    bufferedEntities.add(entity);
                }

                alreadyAvailableIds.add(entity.getId());
            }

            reader.endArray();
            reader.endObject();
            reader.close();
        } else {
            JSONParseException e = new JSONParseException(
                    "Parsing of cloudant response failed. Tag 'features' not found. ");
            log.error(e.getLoggingString());
            throw e;
        }
    } catch (IOException ex) {
        JSONParseException e = new JSONParseException("Parsing of cloudant response failed.", ex);
        log.error(e.getLoggingString());
        throw e;
    }
}

From source file:de.pribluda.android.jsonmarshaller.JSONUnmarshaller.java

License:Apache License

/**
 * unmarshall single JSON object/*from   www .  jav  a  2s .  c  o m*/
 *
 * @param beanToBeCreatedClass
 * @param <T>
 * @return
 * @throws IllegalAccessException
 * @throws InstantiationException
 * @throws NoSuchMethodException
 * @throws InvocationTargetException
 */
public static <T> T unmarshall(JsonReader reader, java.lang.Class<T> beanToBeCreatedClass) throws IOException,
        NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
    // nothing there - bail out
    reader.beginObject();

    if (reader.peek() == null) {
        return null;
    }
    T value = beanToBeCreatedClass.getConstructor().newInstance();
    while (reader.hasNext()) {
        String key = reader.nextName();

        //  capitalise to standard setter pattern
        StringBuilder sb = new StringBuilder();
        sb.append(SETTER_PREFIX).append(Character.toUpperCase(key.charAt(0))).append(key.substring(1));
        String methodName = sb.toString();

        Method method = getCandidateMethod(beanToBeCreatedClass, methodName);

        // must be kind of setter method
        if (method != null) {
            Class clazz = method.getParameterTypes()[0];
            // as we have setter, we can process value
            Object v = unmarshalValue(reader, clazz);

            // can we use setter method directly?
            if (clazz.isAssignableFrom(v.getClass())) {
                method.invoke(value, v);
                continue;
            }

            Object obj = convertToObject(clazz, v);
            if (obj != null)
                method.invoke(value, obj);
        } else {
            // no suitable method was found - skip this value altogether
            reader.skipValue();
        }
    }

    reader.endObject();

    return value;

}

From source file:de.pribluda.android.jsonmarshaller.JSONUnmarshaller.java

License:Apache License

/**
 * unmarshal current value, possibly walking down the three
 *
 * @param reader json reader to pull value from
 * @param clazz  expected class/*ww  w .  j a  va2  s . com*/
 * @return
 * @throws IOException
 * @throws IllegalAccessException
 * @throws InvocationTargetException
 * @throws InstantiationException
 * @throws NoSuchMethodException
 */
private static Object unmarshalValue(JsonReader reader, Class clazz) throws IOException, IllegalAccessException,
        InvocationTargetException, InstantiationException, NoSuchMethodException {

    Object value = null;

    switch (reader.peek()) {
    case STRING:
    case NUMBER:
        // process string
        value = reader.nextString();
        break;
    case BOOLEAN:
        value = reader.nextBoolean();
        break;
    case BEGIN_ARRAY:
        //  we are interested in arrays
        if (clazz.isArray()) {
            // populate field value from JSON Array
            value = populateRecusrsive(clazz, reader);
        } else {
            reader.skipValue();
        }
        break;
    case BEGIN_OBJECT:
        // so, we are unmarshalling nested object - recurse
        value = unmarshall(reader, clazz);
        break;
    default:
        // do not know what to do with it,  skip
        reader.skipValue();
    }

    return value;
}

From source file:edu.isi.karma.modeling.alignment.GraphUtil.java

License:Apache License

public static DirectedWeightedMultigraph<Node, DefaultLink> readGraph(JsonReader reader) throws IOException {

    DirectedWeightedMultigraph<Node, DefaultLink> graph = new DirectedWeightedMultigraph<Node, DefaultLink>(
            LabeledLink.class);

    Node n, source, target;//w ww  . j  a  v  a2s . c  o m
    DefaultLink l;
    Double[] weight = new Double[1];
    HashMap<String, Node> idToNodes = new HashMap<>();

    reader.beginObject();
    while (reader.hasNext()) {
        String key = reader.nextName();
        if (key.equals("nodes") && reader.peek() != JsonToken.NULL) {
            reader.beginArray();
            while (reader.hasNext()) {
                n = readNode(reader);
                if (n != null) {
                    idToNodes.put(n.getId(), n);
                    graph.addVertex(n);
                }
            }
            reader.endArray();
        } else if (key.equals("links") && reader.peek() != JsonToken.NULL) {
            reader.beginArray();
            while (reader.hasNext()) {
                l = readLink(reader, weight);
                if (l != null) {
                    source = idToNodes.get(LinkIdFactory.getLinkSourceId(l.getId()));
                    target = idToNodes.get(LinkIdFactory.getLinkTargetId(l.getId()));
                    if (source != null && target != null) {
                        graph.addEdge(source, target, l);
                        if (weight[0] != null)
                            graph.setEdgeWeight(l, weight[0].doubleValue());
                    }
                }
            }
            reader.endArray();
        } else {
            reader.skipValue();
        }
    }
    reader.endObject();

    return graph;
}

From source file:edu.isi.karma.modeling.alignment.GraphUtil.java

License:Apache License

private static Node readNode(JsonReader reader) throws IOException {

    String id = null;/*from  ww w  .  ja va 2s  .  c  om*/
    Label label = null;
    NodeType type = null;
    String hNodeId = null;
    String columnName = null;
    Label rdfLiteralType = null;
    String language = null;
    Label datatype = null;
    String value = null;
    boolean isUri = false;
    SemanticType userSelectedSemanticType = null;
    List<SemanticType> learnedSemanticTypes = null;
    List<SemanticType> userSemanticTypes = null;
    Set<String> modelIds = null;

    reader.beginObject();
    while (reader.hasNext()) {
        String key = reader.nextName();
        if (key.equals("id") && reader.peek() != JsonToken.NULL) {
            id = reader.nextString();
        } else if (key.equals("label") && reader.peek() != JsonToken.NULL) {
            label = readLabel(reader);
        } else if (key.equals("type") && reader.peek() != JsonToken.NULL) {
            type = NodeType.valueOf(reader.nextString());
        } else if (key.equals("hNodeId") && reader.peek() != JsonToken.NULL) {
            hNodeId = reader.nextString();
        } else if (key.equals("columnName") && reader.peek() != JsonToken.NULL) {
            columnName = reader.nextString();
        } else if (key.equals("datatype") && reader.peek() != JsonToken.NULL) {
            datatype = readLabel(reader);
        } else if (key.equals("value") && reader.peek() != JsonToken.NULL) {
            value = reader.nextString();
        } else if (key.equals("isUri") && reader.peek() != JsonToken.NULL) {
            isUri = Boolean.parseBoolean(reader.nextString());
        } else if (key.equals("rdfLiteralType") && reader.peek() != JsonToken.NULL) {
            rdfLiteralType = readLabel(reader);
        } else if (key.equals("language") && reader.peek() != JsonToken.NULL) {
            language = reader.nextString();
        } else if (key.equals("userSelectedSemanticType") && reader.peek() != JsonToken.NULL) {
            userSelectedSemanticType = readSemanticType(reader);
        } else if (key.equals("suggestedSemanticTypes") && reader.peek() != JsonToken.NULL) {
            learnedSemanticTypes = new ArrayList<>();
            reader.beginArray();
            while (reader.hasNext()) {
                SemanticType semanticType = readSemanticType(reader);
                learnedSemanticTypes.add(semanticType);
            }
            reader.endArray();
        } else if (key.equals("userSemanticTypes") && reader.peek() != JsonToken.NULL) {
            userSemanticTypes = new ArrayList<>();
            reader.beginArray();
            while (reader.hasNext()) {
                SemanticType semanticType = readSemanticType(reader);
                userSemanticTypes.add(semanticType);
            }
            reader.endArray();
        } else if (key.equals("learnedSemanticTypes") && reader.peek() != JsonToken.NULL) {
            learnedSemanticTypes = new ArrayList<>();
            reader.beginArray();
            while (reader.hasNext()) {
                SemanticType semanticType = readSemanticType(reader);
                learnedSemanticTypes.add(semanticType);
            }
            reader.endArray();
        } else if (key.equals("modelIds") && reader.peek() != JsonToken.NULL) {
            modelIds = readModelIds(reader);
        } else {
            reader.skipValue();
        }
    }
    reader.endObject();

    Node n = null;
    if (type == NodeType.InternalNode) {
        n = new InternalNode(id, label);
    } else if (type == NodeType.ColumnNode) {
        n = new ColumnNode(id, hNodeId, columnName, rdfLiteralType, language);
        if (userSemanticTypes == null && userSelectedSemanticType != null) {
            userSemanticTypes = new ArrayList<>();
            userSemanticTypes.add(userSelectedSemanticType);
        }
        if (userSemanticTypes != null) {
            for (SemanticType st : userSemanticTypes)
                ((ColumnNode) n).assignUserType(st);
        }
        ((ColumnNode) n).setLearnedSemanticTypes(learnedSemanticTypes);
    } else if (type == NodeType.LiteralNode) {
        n = new LiteralNode(id, value, datatype, language, isUri);
    } else {
        logger.error("cannot instanciate a node from the type: " + type.toString());
        return null;
    }

    n.setModelIds(modelIds);

    return n;
}