有没有一种方法可以很好地使用 gson 来获取包含 java 中有 4 个变量的数组的列表

is there a way to use gson well to get an list with arrays that have 4 variables in java

我正在使用 lwjgl 制作一个 3D 引擎。

我尝试使用 HashMap 的列表来创建 class,但是 HashMap 只接受 2 个变量,所以这不起作用。

我获取 JSON 文件的部分代码

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

BlockIndexFileclass

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,然后使用它来获取其他变量,例如 texturemodel

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'}