Jawa / Говнокод #11571 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
private void viewField(int id) {
        try {
            List<Fieldmaterials> materials = materialsSession.FieldmaterialsBy(id);
            int size = materials.size() - 1;
            int i = 0;
            JSONWriter json = new JSONStringer().object();
            json.key("namefield").array();

            while (i <= size) {
                Fieldmaterials get = materials.get(i);
                json.value(get.getNamefield());
                i++;
            }
            json.endArray();
            json.key("typefield").array();

            i = 0;
            while (i <= size) {
                Fieldmaterials get = materials.get(i);
                json.value(get.getTypefield());
                i++;
            }

            json.endArray();
            json.key("orderfield").array();

            i = 0;
            while (i <= size) {
                Fieldmaterials get = materials.get(i);
                json.value(get.getOrderfieldmaterials());
                i++;
            }
            json.endArray().endObject();

        } catch (Exception e) {
            e.printStackTrace();
        }

Не нашел более хорошего способа сериализовать в JSON. Нужно было оформить поля объектов в массивы, что-бы потом удобно разобрать в javascript

Запостил: Kerny Kerny, (Updated )

Комментарии (11) RSS

  • Ну можно через рефлекшн сделать, будет короче, но хз... еще вариант - на каком-нибудь Питоне написать скрипт, который это сгенерирует.
    ЗЫ. А почему не использовать форыч? Особо в этом свете не понятно size() - 1 и i <= size. Зачем лишние движения делать?
    Ответить
      • По поводу size - это я затупил, тоже (( Хотя замечал, что лишние вычисления, но не менял - заюзаю форыч. Через рефлекшн, тоже думал. Даже написал небольшой пример.
        Ответить
  • package tests;
    
    import java.util.List;
    import java.util.ArrayList;
    import java.lang.reflect.Method;
    
    class Loops
    {
        private static class JSONObject
        {
            String getNameField()
            {
                return "nameField";
            }
    
            String getTypeField()
            {
                return "typeField";
            }
    
            String getOrderFieldMaterials()
            {
                return "orderFieldMaterials";
            }
        }
    
        private static void test()
        {
            List<JSONObject> objects = new ArrayList<JSONObject>() {{
                    add(new JSONObject());
                    add(new JSONObject());
                    add(new JSONObject());
                    add(new JSONObject());
                }};
            printInfo(objects, "getNameField");
            printInfo(objects, "getTypeField");
            printInfo(objects, "getOrderFieldMaterials");
        }
    
        private static void printInfo(List<JSONObject> objects, String method)
        {
            Class<?> jsonObject = JSONObject.class;
            try
            {
                Method jsonMethod = jsonObject.getDeclaredMethod(method);
                for (JSONObject object : objects)
                    System.out.format("%s%n", jsonMethod.invoke(object));
            }
            catch (Exception ex) { }
        }
        
        public static void main(String... args)
        {
            test();
        }
    }
    Безмозмезндо! (т.е. даром)
    Ответить
    • Спасибо, попробую, отпишусь. Просто мне нужна структура такого типа:
      {"namefield":["value1","value2","value3"],
      "typefield":["value1","value2","value3"],
      "orderfield":["value1","value2","value3"]
      }

      Чтобы у меня в javascript было 3 массива, которые я потом там разберу.
      Ответить
  • А вот к такому варианту как относитесь?
    private void viewField(int id) {
        try {
            List<Fieldmaterials> materials = materialsSession.FieldmaterialsBy(id);
            JSONWriter json = new JSONStringer();
    
            json.array();
    
            for (Fieldmaterials material : materials) {
                json.object();
                json.key("name").value(material.getNameField());
                json.key("value").value(material.getValueField());
                json.key("order").value(material.getOrderFieldMaterials());
                json.endObject();
            }
    
            json.endArray();
    
        } catch (Exception e) {
            e.printStackTrace();
        }
        // ...
    }


    Если я не затупил - в результате получится вот такой JSON, который несложно использовать в JS:
    [
        {"name": "blabla", "value": "blabla", "order" : "blabla"},
        {"name": "blabla", "value": "blabla", "order" : "blabla"},
        {"name": "blabla", "value": "blabla", "order" : "blabla"}
    ]
    Ответить
    • Ну или идентичный вашему:
      private void viewField(int id) {
          try {
              List<Fieldmaterials> materials = materialsSession.FieldmaterialsBy(id);
              JSONWriter json = new JSONStringer().object();
      
              json.key("namefield").array();
              for (Fieldmaterials material : materials)
                  json.value(material.getNameField());
              json.endArray();
      
              json.key("typefield").array();
              for (Fieldmaterials material : materials)
                  json.value(material.getTypeField());
              json.endArray();
      
              json.key("orderfield").array();
              for (Fieldmaterials material : materials)
                  json.value(material.getOrderFieldMaterial());
              json.endArray();
      
              json.endObject;
      
          } catch (Exception e) {
              e.printStackTrace();
          }
          // ...
      }

      Тоже говнокод, конечно. Но меньший 😉
      Ответить
      • Ну, да. Просто более читабельно. Этот вариант кода тестовый, я его буду рефакторить в любом случае.
        Ответить
  • Попробуйте Gson, нам можно написать удобный адаптер для рендеринга своих типов.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8