org.eclipse.php.composer.api.json.JsonParser.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.php.composer.api.json.JsonParser.java

Source

/*******************************************************************************
 * Copyright (c) 2012, 2016 PDT Extension Group and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     PDT Extension Group - initial API and implementation
 *******************************************************************************/
package org.eclipse.php.composer.api.json;

import java.io.IOException;
import java.io.Reader;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map.Entry;

import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException;
import com.google.gson.stream.MalformedJsonException;

public class JsonParser {

    public JsonParser() {

    }

    public Object parse(String json) throws ParseException {
        com.google.gson.JsonParser jsonParser = new com.google.gson.JsonParser();
        try {
            return buildTree(jsonParser.parse(json));
        } catch (JsonSyntaxException e) {
            throw buildException(e);
        }
    }

    private Object buildTree(JsonElement entity) {

        if (entity.isJsonPrimitive()) {
            JsonPrimitive p = entity.getAsJsonPrimitive();
            if (p.isBoolean()) {
                return p.getAsBoolean();
            }
            if (p.isNumber()) {
                return p.getAsLong();
            }
            return p.getAsString();
        } else if (entity.isJsonNull()) {
            return null;
        } else if (entity.isJsonArray()) {
            LinkedList<Object> arr = new LinkedList<Object>();
            for (JsonElement el : entity.getAsJsonArray()) {
                arr.add(buildTree(el));
            }
            return arr;
        } else if (entity.isJsonObject()) {
            LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
            for (Entry<String, JsonElement> el : entity.getAsJsonObject().entrySet()) {
                map.put(el.getKey(), buildTree(el.getValue()));
            }
            return map;
        }

        return null;
    }

    public Object parse(Reader reader) throws ParseException, IOException {
        com.google.gson.JsonParser jsonParser = new com.google.gson.JsonParser();
        try {
            return buildTree(jsonParser.parse(reader));
        } catch (JsonSyntaxException e) {
            throw buildException(e);
        }
    }

    private ParseException buildException(JsonSyntaxException e) {
        ParseException pe = new ParseException(
                e.getCause() instanceof MalformedJsonException ? e.getCause().getMessage() : e.getMessage());
        if (e.getCause() instanceof MalformedJsonException) {
            pe.setErrorType(ParseException.ERROR_UNEXPECTED_MALFORMED);
        } else if (e.getCause() instanceof IOException) {
            pe.setErrorType(ParseException.ERROR_UNEXPECTED_IO);
        } else if (e.getCause() != null) {
            pe.setErrorType(ParseException.ERROR_UNEXPECTED_EXCEPTION);
        }

        return pe;
    }

}