1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Как изменить переменную в JSON с помощью библиотеки GSON

Тема в разделе "Оффтопик", создана пользователем maksim182003, 7 сен 2015.

  1. Автор темы
    maksim182003

    maksim182003 Активный участник Пользователь

    Баллы:
    78
    Пишу парсер assets, начал писать сборку assets, но возникла такая проблема, в indexes/1.7.10.json нужно перезаписывать переменную size.
     
  2. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
  3. Автор темы
    maksim182003

    maksim182003 Активный участник Пользователь

    Баллы:
    78
  4. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Нет.
    Попытайся разобраться сам, код небольшой.
     
  5. Автор темы
    maksim182003

    maksim182003 Активный участник Пользователь

    Баллы:
    78
    Не смог.Обьясни в скайпе
    Или напиши в ЛС
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот лови мой класс.

    Код:
    import java.io.File;
    import java.io.FileReader;
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import com.google.gson.reflect.TypeToken;
    
    
    public class assets {
       
        private String jsonfile;
        Map<String, HashMap<String, HashMap<String, String>>> keys;
        public assets(String File) {
            this.jsonfile = File;
            this.keys = Json();
        }
       
        private Map<String, HashMap<String, HashMap<String, String>>> Json() {
            try {
                File indexFile = new File(this.jsonfile);
                JsonParser jsonParser = new JsonParser();
                JsonObject object = new JsonObject();
                object = jsonParser.parse(new FileReader(indexFile)).getAsJsonObject();
                Gson gson = new Gson();
                Type Map = new TypeToken<Map<String, HashMap<String, HashMap<String, String>>>>(){}.getType();
                Map<String, HashMap<String, HashMap<String, String>>> assets = gson.fromJson(object, Map);
                return assets;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
       
        public ArrayList<String> keys() {
            List<String> objects = new ArrayList<String>();
            for (String key : keys.get("objects").keySet()) {
                objects.add(key);
            }
            return (ArrayList<String>) objects;
        }
       
        public String getHash(String i) {
            return keys.get("objects").get(i).get("hash");
        }
       
        public String getSize(String i) {
            return keys.get("objects").get(i).get("size");
        }
       
        public void setHash(String i, String v) {
            keys.get("objects").get(i).put("hash", v);
        }
       
        public void setSize(String i , String v) {
            keys.get("objects").get(i).put("size", v);
        }
       
        public void setElement(String i, String hash, String size) {
            HashMap<String, String> v = new HashMap<String, String>();
            v.put("hash", hash);
            v.put("size", size);
            keys.get("objects").put(i, v);
        }
       
        public void removeElement(String i) {
            keys.get("objects").remove(i);
        }
       
        public String MapToJson() {
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            gson.toJson(keys);
            Scanner scanner = new Scanner(gson.toJson(keys));
            StringBuilder sb = new StringBuilder();
            while (scanner.hasNextLine()) {
              String line = scanner.nextLine();
              if(line.contains("\"size\":")) {
                  String[] Transform = line.split(":");
                  sb.append(Transform[0]+":"+Transform[1].replace("\"", "")+"\n");
              } else {
                  sb.append(line+"\n");
              }
            }
            scanner.close();
            return sb.toString();
        }
    }
    Юзать примерно так.

    Код:
             assets ass = new assets("1.7.10.json");
       
             for(String demo : ass.keys()) {
                     if(demo.equalsIgnoreCase("realms/lang/de_DE.lang")) {
                         ass.setElement(demo, "0", "0");
                      }
             }
             String Json = ass.MapToJson(); //Json переменную записываем обратно в файл.
     
    Последнее редактирование: 9 сен 2015
  7. Автор темы
    maksim182003

    maksim182003 Активный участник Пользователь

    Баллы:
    78
    спс
    Почему то не работает
    public static void compile() throws FileNotFoundException {
    File file1 = new File(new File("").getAbsolutePath(), "objects");
    File file2 = new File(new File("").getAbsolutePath(), "indexes/1.7.10.json");
    File file3 = new File(new File("").getAbsolutePath(), "complete-folder");
    assets ass = new assets("indexes/1.7.10.json");
    BufferedReader bufferedreader = Files.newReader(file2, Charsets.UTF_8);
    JsonObject jsonobject = (new JsonParser()).parse(bufferedreader)
    .getAsJsonObject();
    JsonObject jsonobject1 = JsonUtils.getJsonObjectFieldOrDefault(
    jsonobject, "objects", (JsonObject) null);
    JsonObject js = new JsonObject();




    if (jsonobject1 != null)
    {
    Iterator iterator = jsonobject1.entrySet().iterator();

    while (iterator.hasNext())
    {

    Entry entry = (Entry)iterator.next();
    JsonObject jsonobject2 = (JsonObject)entry.getValue();
    String s1 = (String)entry.getKey();
    String[] astring = s1.split("/", 2);
    String s2 = astring.length == 1 ? astring[0] : astring[0] + ":" + astring[1];
    String s3 = JsonUtils.getJsonObjectStringFieldValue(jsonobject2, "hash");
    File file7 = new File(file3 + file3.separator + s1);
    File file8 = new File(file1 + file1.separator + s3.substring(0,2) + file1.separator + s3);
    ass.setElement(s1, "0", "0");
    String Json = ass.MapToJson(); //Json переменную записываем обратно в файл.

    System.out.println("Путь: " + s1 + ", " + "Хэш: " + s3 + file1.separator + file8.length());

    try {
    FileUtils.copyFile(file7, file8);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    }


    }
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Путь до файла укажи правильно.
    Дописал MapToJson() чтоб size правильно записывать без ковычек.
     
    Последнее редактирование: 9 сен 2015
  9. Автор темы
    maksim182003

    maksim182003 Активный участник Пользователь

    Баллы:
    78
    Ну так у меня файл в indexes
    Скинь код записи без ковычек
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Выше смотри.
     
  11. NaPsTeR

    NaPsTeR Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    kesha0129
    Хм, интересно. Мне бы такой парсер пригодился, есть успехи?
     

Поделиться этой страницей