Есть ли способ хорошо использовать GSON, чтобы получить список с массивами, которые имеют 4 переменные в Java - PullRequest
0 голосов
/ 03 мая 2019

Я создаю 3D движок, используя lwjgl.

Я пытался создать класс для использования списка HashMap, но HashMap принимает только 2 переменные, поэтомуне работает.

Часть моего кода для получения JSON файла

Gson().fromJson(string.toString(), BlockIndexFile.class);

класса BlockIndexFile

public class BlockIndexFile {

    List<HashMap<String, String>> blocks = new ArrayList<HashMap<String, String>>();

    public void setBlocks(List<HashMap<String, String>> blocks) {
        this.blocks = blocks;
    }

    public List<HashMap<String, String>> getBlocks(){
        return this.blocks;
    }
}

и файла json

{
    "blocks":
    [
        {
        "name": "Foo",
        "id": "foo",
        "model": "cube1",
        "texture": "foo"

        }
    ]
}

Я ожидал, что смогу использовать HashMap для получения id, а затем использовать его для получения других переменных, таких как texture и model.

1 Ответ

0 голосов
/ 05 мая 2019

HashMap может содержать более 2 переменных. Ниже приведен пример, как вы могли бы его использовать:

import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();
        BlockIndexFile blockIndexFile;
        try (FileReader fileReader = new FileReader(jsonFile)) {
            blockIndexFile = gson.fromJson(fileReader, BlockIndexFile.class);
        }
        HashMap<String, String> node0 = blockIndexFile.getBlocks().get(0);
        System.out.println("id => " + node0.get("id"));
        System.out.println("model => " + node0.get("id"));
        System.out.println("texture => " + node0.get("id"));
    }
}

Над отпечатками кодов:

id =>foo
model =>foo
texture =>foo

Вместо Map вы можете создать POJO, а код должен быть намного проще и лаконичнее:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();
        BlockIndexFile blockIndexFile;
        try (FileReader fileReader = new FileReader(jsonFile)) {
            blockIndexFile = gson.fromJson(fileReader, BlockIndexFile.class);
        }
        Block node0 = blockIndexFile.getBlocks().get(0);
        System.out.println(node0);
    }
}

class BlockIndexFile {

    private List<Block> blocks = new ArrayList<>();

    // getters, setters
}

class Block {

    private String id;
    private String name;
    private String model;
    private String texture;

    // getters, setters, toString
}

Над отпечатками кодов:

Block{id='foo', name='Foo', model='cube1', texture='foo'}
...