JsonMaker - Biblioteka Java oraz strona www

0

Tutaj strona, jest na niej kilka przykładów wykorzystania i link do gita.
Na gitcie source code ale nie wiem jak go zapakować tak zeby nikt mnie nie wyśmiał że ło "źle zapakowane" czy coś. Mam po prostu wrzucić do *.jara?

Podstrony na stronie są na razie puste, bo chcę popracować nad kolorami/ułożeniem elementów zwłaszcza w nagłówku. Może ktoś bardziej lepsiejszy z artystycznego punktu widzenia coś tu dopomoże.

http://jsonmaker.pl/

1

Zły dział i:

        for (int i = 0; i < inlineElement.length; i++) 
        {
            Object value = inlineElement[i];
            if (value instanceof JsonBasic) {       // if is JsonBasic, just add it
                this.elements[i] = (JsonBasic)value;
            } 
            else if (value instanceof String) {     // if inline, create specific type for it
                this.elements[i] = new JsonString((String)value);
            } 
            else if (value instanceof Integer) {    // ...
                this.elements[i] = new JsonInt((Integer)value);
            }
            else if (value instanceof Boolean) {    // ...
                this.elements[i] = new JsonBool((Boolean)value);
            } 
            else if (value == null) {
                this.elements[i] = new JsonElement();
            }
            else {                                  // if found an unexpected object, throw
                throw new JsonException(value.toString(), value.getClass().getSimpleName(), "ValidValueObject", i);
            }
        }

http://stackoverflow.com/questions/5579309/switch-instanceof

Wydaje mi się że to

public class JsonInt extends JsonBasic 

Mogło by być bardziej generyczne,

np:

public class JsonInt extends Json<Integer> 

Wszędzie masz arraye, dziwne..

inal ArrayList<JsonBasic> elems = new ArrayList<>(objects.length);

Z jakiej planety przyleciałeś na planetę Java ?

A tego nie skomentuje:
https://github.com/DanonTeam/JsonMaker/blob/master/org/danon/jsondesigner/data/JsonObject.java

P.S czemu nie używasz kolekcji ?

0

Z planety "dopiero się uczę i pierwszy raz pokazuję komuś mój kod".
Czemu ta ArrayList jest zła?
Czemu ten plik którego nie skomentujesz jest zły?

0
TomRiddle napisał(a):

Z planety "dopiero się uczę i pierwszy raz pokazuję komuś mój kod".
Czemu ta ArrayList jest zła?
Czemu ten plik którego nie skomentujesz jest zły?

Spoko ja Cię nie atakuje :D

Powinieneś zrobić List = ArrayList bo powinno się pisać do interfacu a nie implementacji (duck typing :D) https://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html
Możesz potem bez problemu zrogić

List = LinkedList
albo List = TwojaImplementacja

nie ma problemu :)

W tym pliku, metody są za duże, metoda powinna robić jedną rzecz, jeżeli robi dwie, powinna wywołać inną metodę(w idealnym świecie)

0

Większość z nich to wywalanie błędów.Jakieś 70-80%.

        final ArrayList<JsonBasic> elems = new ArrayList<>(objects.length);
        
        for (int i = 0; i < objects.length; i++)
        {
            // We are assumng that the first object will be a "key"
            Object jsonKey = objects[i];
            if (jsonKey == null) {
                switch (JsonDesignHints.Error.Handling) 
                {
                    case Medium:
                        System.err.println("ValidKeyObject expected, null found");
                        break;
                    case Strict:
                        throw new JsonException("null", "ValidKeyObject");
                } 
                continue;
            }  
            // inline designing 
            else if (jsonKey instanceof String)        
            {
                String keyFieldName = (String)jsonKey;
                if (keyFieldName.equals("")) {
                    switch (JsonDesignHints.Error.Handling) 
                    {
                        case Medium:
                            System.err.println("ValidKeyObject expected, empty string found");
                            break;
                        case Strict:
                            throw new JsonException("EmptyString", "String", "ValidKeyObject", i+1);
                    } 
                    continue;
                }
                else if (i+1 < objects.length) 
                {
                    Object generalValue = objects[i+1];
                    if (generalValue == null) {
                        switch (JsonDesignHints.Parse.AllowNullValues) {
                            case No:
                                switch (JsonDesignHints.Error.Handling) 
                                {
                                    case Medium:
                                        System.err.println("NonNullValue expected, null found (Null values are forbidden, use JsonDesignHint).");
                                        break;
                                    case Strict:
                                        throw new JsonException("NullValue", "NonNullValue", i+1);
                                } 
                                
                                break;
                            case Medium:
                            case Strict:
                                elems.add(new JsonElement(keyFieldName));
                                break;
                        }
                    }
                    else if (generalValue instanceof JsonBasic)   // (unnamed element)
                    {
                        JsonBasic value = (JsonBasic)generalValue;
                        if (value.isAnonymous()) {
                            value.setFieldName(keyFieldName);
                            elems.add(value);
                        }
                        else {
                            switch (JsonDesignHints.Error.Handling) {
                                case Medium:
                                    break;
                                case Strict:
                                    throw new JsonException("NamedObject", value.getClass().getSimpleName(), "AnonymousObject", i+2);
                            }
                        }
                        // check if is anonymous
                    }
                    else {
                        if (generalValue instanceof String) {
                            String value = (String)generalValue;
                            elems.add(new JsonString(keyFieldName, value));
                            
                        }
                        else if (generalValue instanceof Integer) {
                            Integer value = (Integer)generalValue;
                            elems.add(new JsonInt(keyFieldName, value));
                            
                        }
                        else if (generalValue instanceof Boolean) {
                            Boolean value = (Boolean)generalValue;
                            elems.add(new JsonBool(keyFieldName, value));
                        }
                        else {
                            throw new JsonException("InvalidObject", generalValue.getClass().getSimpleName(), "ValidPrimitive");
                        }
                    }
                    i++; // skip the next one, cause it's already added
                    continue;
                }
                else {
                    throw new JsonException("End of Chain", "ValidValueObject");
                }
            } 
            // regular building (named element)
            else if (jsonKey instanceof JsonBasic) 
            {
                JsonBasic element = (JsonBasic)jsonKey;
                if (element.isAnonymous()) {
                    switch (JsonDesignHints.Error.Handling) {
                        case Medium:
                            System.err.println("Anonymous field found, named object expected");
                            continue;
                        case Strict:
                            throw new JsonException("anonymous", "JsonBasic", "named object", i+1);
                    }
                }
                else {
                    elems.add(element);                   
                }
                continue;
            } 
            else {
                throw new JsonException(jsonKey.toString(), jsonKey.getClass().getSimpleName(), "JsonBasic or ValidObject", i+1);
            }
        }
        
        return elems.toArray(new JsonBasic[elems.size()]);        
    }
    

To nie robi jednej rzeczy

0

Bez błędów jest około 50.

private JsonBasic[] inlineDesigner(Object[] objects) 
    {
        final ArrayList<JsonBasic> elems = new ArrayList<>(objects.length);
        
        for (int i = 0; i < objects.length; i++)
        {
            // We are assumng that the first object will be a "key"
            Object jsonKey = objects[i];
            else if (jsonKey instanceof String)        
            {
                String keyFieldName = (String)jsonKey;
                if (keyFieldName.equals("")) {
                }
                else if (i+1 < objects.length) 
                {
                    Object generalValue = objects[i+1];
                    if (generalValue == null) {
                    }
                    else if (generalValue instanceof JsonBasic)   // (unnamed element)
                    {
                        JsonBasic value = (JsonBasic)generalValue;
                        if (value.isAnonymous()) {
                            value.setFieldName(keyFieldName);
                            elems.add(value);
                        }
                    }
                    else {
                        if (generalValue instanceof String) {
                            String value = (String)generalValue;
                            elems.add(new JsonString(keyFieldName, value));
                        }
                        else if (generalValue instanceof Integer) {
                            Integer value = (Integer)generalValue;
                            elems.add(new JsonInt(keyFieldName, value));
                        }
                        else if (generalValue instanceof Boolean) {
                            Boolean value = (Boolean)generalValue;
                            elems.add(new JsonBool(keyFieldName, value));
                        }
                    }
                    i++; // skip the next one, cause it's already added
                    continue;
                }
            } 
            // regular building (named element)
            else if (jsonKey instanceof JsonBasic) 
            {
                JsonBasic element = (JsonBasic)jsonKey;
                if (!element.isAnonymous()) {
                    elems.add(element);
                }
                continue;
            } 
        }
        
        return elems.toArray(new JsonBasic[elems.size()]);        
    }
0
    public JsonBasic getMember(String fieldName) {
        for (JsonBasic basic : this.members) {
            if (basic.getName().equals(fieldName)) {
                return basic;
            }
        }
        return null;
    }

to jest idealne na stream()

I nie zwracaj null'i, rób Optional<>

0

Taki lepszy?

        Arrays.stream(this.members)
            .filter(basic -> basic.getName().equals(fieldName))
            .findFirst()
            .get();

1 użytkowników online, w tym zalogowanych: 0, gości: 1